最近访问(前10条)

常用设计模式📖

1197

🎨 深入浅出:探索设计模式的奥秘 🛠️

在软件工程的世界里,设计模式是解决常见问题的蓝图。
它们帮助开发者通过已验证的方法高效地解决复杂设计问题,从而加速开发过程并提高软件的质量和可维护性。

设计模式详细分类

类别 设计模式
创建型模式 单例模式
简单工厂模式
工厂方法模式
抽象工厂模式
建造者模式
原型模式
结构型模式 适配器模式
桥接模式
组合模式
装饰者模式
外观模式
享元模式
代理模式
行为型模式 责任链模式
观察者模式
模板方法模式
命令模式
状态模式
策略模式
迭代器模式
中介者模式
访问者模式
备忘录模式
解释器模式

设计模式的分类

设计模式大致分为三大类:创建型模式结构型模式行为型模式。每类模式通过不同的角度解决软件设计中的特定问题。

创建型模式

创建型模式关注对象的创建机制,帮助创建对象的同时隐藏创建逻辑,以提高系统的灵活性和可重用性。这类模式主要包括:

示例:在游戏开发中,建造者模式可以用来创建复杂的角色对象,玩家可以选择不同的装备、技能等,建造者模式可以帮助逐步构建角色的各个部分。

结构型模式

结构型模式处理对象之间的关系,使得即使在复杂的系统中也能轻松地管理和维护。这类模式主要包括:

示例:在图形编辑软件中,装饰者模式可以用来动态地添加图形的边框、阴影等效果,而无需改变图形类的代码。

行为型模式

行为型模式专注于对象之间的通信,为对象间的交互提供更灵活的沟通机制。这类模式主要包括:

示例:在消息系统中,观察者模式可以用来实现订阅与通知机制,当发布者发布新消息时,所有订阅者都会收到通知并更新内容。

设计模式在现实世界的应用

让我们通过几个例子,看看这些设计模式如何在现实世界中被应用来解决具体的软件设计问题。

🏗️ 单例模式在数据库连接中的应用

在许多应用中,管理对数据库的单一连接是至关重要的。单例模式确保全局只有一个数据库连接实例,减少了资源消耗,并保证了连接管理的一致性。例如,在一个Web应用中,所有的数据库操作都通过同一个数据库连接实例进行,避免了多次创建和销毁连接的开销。


// 单例模式示例(Java)
public class DatabaseConnection {
    private static DatabaseConnection instance;
    private Connection connection;

    private DatabaseConnection() {
        // 初始化数据库连接
    }

    public static synchronized DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }

    public Connection getConnection() {
        return connection;
    }
}
    

🌉 桥接模式简化多平台UI开发

开发跨平台应用时,桥接模式允许将用户界面(UI)与业务逻辑分离,使得两者可以独立变化而不互相影响,从而简化了开发。例如,一个跨平台的绘图应用,可以使用桥接模式将不同平台的绘图API(如Windows的GDI和macOS的Quartz)与业务逻辑分离,方便维护和扩展。


// 桥接模式示例(C#)
public abstract class Shape {
    protected IDrawingAPI drawingAPI;

    protected Shape(IDrawingAPI drawingAPI) {
        this.drawingAPI = drawingAPI;
    }

    public abstract void Draw();
}

public class Circle : Shape {
    private double x, y, radius;

    public Circle(double x, double y, double radius, IDrawingAPI drawingAPI) : base(drawingAPI) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    public override void Draw() {
        drawingAPI.DrawCircle(x, y, radius);
    }
}

public interface IDrawingAPI {
    void DrawCircle(double x, double y, double radius);
}
    

📦 策略模式在支付系统中的灵活性

在线支付系统需要支持多种支付方法。策略模式允许在运行时选择最适合的支付策略,提高了系统的灵活性和可扩展性。例如,用户可以选择使用信用卡、PayPal或比特币进行支付,系统通过策略模式动态切换支付方式,而无需修改核心支付逻辑。


// 策略模式示例(Python)
from abc import ABC, abstractmethod

class PaymentStrategy(ABC):
    @abstractmethod
    def pay(self, amount):
        pass

class CreditCardPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Using credit card to pay {amount} dollars.")

class PayPalPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Using PayPal to pay {amount} dollars.")

class BitcoinPayment(PaymentStrategy):
    def pay(self, amount):
        print(f"Using Bitcoin to pay {amount} dollars.")

class ShoppingCart:
    def __init__(self):
        self.items = []
        self.amount = 0

    def add_item(self, item, price):
        self.items.append(item)
        self.amount += price

    def checkout(self, payment_strategy: PaymentStrategy):
        payment_strategy.pay(self.amount)

# 使用示例
cart = ShoppingCart()
cart.add_item("Book", 30)
cart.add_item("Pen", 5)

# 用户选择支付方式
payment = PayPalPayment()
cart.checkout(payment)
    

更多设计模式的实际应用

除了上述示例,设计模式在实际开发中有广泛的应用。以下是一些常见的设计模式及其应用场景:

🔄 观察者模式在实时系统中的应用

在实时系统中,如股票交易平台,观察者模式可以用来实现实时数据更新。当股票价格变化时,所有订阅该股票的用户都会立即收到更新通知,从而做出相应的交易决策。


// 观察者模式示例(JavaScript)
class Subject {
    constructor() {
        this.observers = [];
    }

    subscribe(observer) {
        this.observers.push(observer);
    }

    unsubscribe(observer) {
        this.observers = this.observers.filter(obs => obs !== observer);
    }

    notify(data) {
        this.observers.forEach(observer => observer.update(data));
    }
}

class Observer {
    constructor(name) {
        this.name = name;
    }

    update(data) {
        console.log(`${this.name} received data: ${data}`);
    }
}

// 使用示例
const subject = new Subject();

const observer1 = new Observer("Observer1");
const observer2 = new Observer("Observer2");

subject.subscribe(observer1);
subject.subscribe(observer2);

subject.notify("Stock price updated to $150");
    

🔐 代理模式在安全控制中的应用

在需要控制对某些资源访问的系统中,代理模式可以用来实现访问控制。例如,在一个文件访问系统中,可以使用代理模式来检查用户权限,只有拥有访问权限的用户才能访问特定的文件。


// 代理模式示例(Java)
// Image.java
interface Image {
    void display();
}

// RealImage.java
class RealImage implements Image {
    private String filename;

    public RealImage(String fname) {
        filename = fname;
        loadFromDisk();
    }

    private void loadFromDisk() {
        System.out.println("Loading " + filename);
    }

    @Override
    public void display() {
        System.out.println("Displaying " + filename);
    }
}

// ProxyImage.java
class ProxyImage implements Image {
    private RealImage realImage;
    private String filename;

    public ProxyImage(String fname) {
        filename = fname;
        realImage = null;
    }

    @Override
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(filename);
        }
        realImage.display();
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Image image = new ProxyImage("test_image.jpg");
        // 图片将在这里加载
        image.display();
        // 图片不会重新加载
        image.display();
    }
}
    

结论

深入理解和正确应用设计模式可以显著提高软件开发的效率和质量。设计模式不仅提供了解决特定问题的标准方法,还促进了代码的可读性、可维护性和可扩展性。希望本文能够帮助你在软件设计和开发的旅程中,更加自信和从容地应对各种挑战。

探索结束,但学习之路永无止境。💡

理解与应用常用设计模式❇️

引言

在面向对象编程世界中,设计模式是一种对软件设计中常见问题的通用可重用解决方案。📘 有效地使用设计模式可以帮助我们创建 可重用且可维护的代码。对于新手和有经验的程序员 alike,理解并掌握这些模式是不可或缺的。

常用的设计模式

这篇文章将介绍以下几种常见的设计模式及其应用: 单例模式,工厂模式,装饰器模式等。在应用范例部分,你还会看到我们如何在真实的项目中运用这些模式。✨

在线工具

在互联网上,有很多免费和高质量的在线工具可以帮助我们更好地理解和应用设计模式。❤️ 你将在本文中找到他们的链接。
喜欢 喜欢(0) 不喜欢 不喜欢(0)
更多工具推荐✨️

Url参数转Json发送HTTP请求Xpath工具在线执行代码Map对象转Json代码命名风格切换

在线创意工具助手,释放您的创意潜能,打破创作的边界♡⃝

Copyright© 2025 GptKong.com. All Rights Reserved.沪ICP备2021014086号-6

请告诉我您想搜索的内容🔍✨