(图片来源网络,侵删)
设计模式是软件工程中的常见解决方案,以下是23种常见的设计模式及其优缺点。单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。优点是可以节省系统资源,缺点是在多线程环境下需要处理线程同步问题,难以扩展到抽象基类。工厂模式(Factory):创建对象的设计模式,使用一个共同的接口来创建不同类型的对象。优点是可以减少不必要的代码和增强代码的可读性,缺点是可能使代码更难以理解和维护。观察者模式(Observer):定义对象之间的一对多依赖关系,当一个对象状态改变时,其相关依赖对象会收到通知并自动更新。优点是可以减少不必要的事件和代码,缺点是可能使代码更难以理解和维护。装饰器模式(Decorator):动态地给一个对象添加新的行为或状态。优点是可以实现用户自定义的功能扩展,缺点是可能导致代码的复杂性增加。适配器模式(Adapter):将一个类的接口转换成另一个类的接口。优点是可以解决不兼容问题,缺点是可能导致代码的复杂性增加。策略模式(Strategy):定义一系列算法或策略,并将每一个策略封装起来。优点是可以方便地更换算法或策略,缺点是可能导致代码的复杂性增加。模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。优点是可以方便地扩展算法,缺点是可能导致代码的复杂性增加。责任链模式(Chain of Responsibility):将请求从一个处理对象传递到另一个处理对象。优点是可以避免请求的发送者和接收者之间的耦合,缺点是可能导致代码的复杂性增加。建造者模式(Builder):创建复杂对象的过程分解为一系列更简单的步骤。优点是可以简化对象的创建过程,缺点是可能导致代码的复杂性增加。原型模式(Prototype):创建对象通过复制(或克隆)一个已经存在的实例。优点是可以避免在每次创建新对象时都重新分配资源,缺点是可能导致代码的复杂性增加。组合模式(Composite):允许你把对象组合成树形结构来表示“部分-整体”层次结构的设计模式优点是它可以使客户端对单个对象和复合对象的使用具有一致性,缺点是它可能会使代码更难以理解和维护同时可能会导致复用性降低外观模式(Facade):为子系统中的一组接口提供一个统一的高层接口使得子系统更容易使用优点是它可以使子系统更易于使用和维护缺点是它可能会隐藏子系统的复杂性并且如果子系统变化则外观也要变化享元模式(Flyweight):运用共享技术来有效支持大量细粒度对象的应用程序优点它可以避免大量重复对象创建所需要的内存并且可以提升性能缺点是它可能会引入状态管理问题并且需要额外的工作去实现解释器模式(Interpreter):定义一个简单的语言并使用解释器类进行解释执行该语言中的每条语句都是该语言的一个语法糖每个语句对应一个解释器类的客户端只需直接调用相应的方法即可执行对应的语句无需关心语法的细节优点是它可以简化复杂表达式的实现并且可以提供更加灵活的解释执行方式缺点是需要定义一套完整的语言语法并且需要实现对应的解释器类相对比较繁琐迭代器模式(Iterator):提供一种方法顺序访问聚合对象中的各个元素而又不暴露其底层表示优点它可以简化聚合对象的访问方式并提供统一的接口缺点是它改变了程序的控制流程增加了额外的迭代操作中介者模式(Mediator):定义一个中介者类来封装一系列的对象交互通过中介者类来控制这些交互的逻辑而无需将逻辑分散到各个对象中优点它可以简化对象之间的交互逻辑并且可以更好地控制这些交互的实现缺点是需要引入一个额外的中介者类并且如果中介者类发生变化则所有相关联的对象都需要随之变化备忘录模式(Memento):捕获一个对象的内部状态并将其存储起来在以后需要时可以恢复该对象至原先的状态优点它可以保存对象的状态并且可以在以后需要时恢复该状态缺点是需要额外存储空间来保存备忘录对象并且可能会破坏封装性使得其他开发人员难以理解该模式的实现细节观察者模式(Observer):定义对象之间的一对多依赖关系,当一个对象状态改变时,其相关依赖对象会收到通知并自动更新。优点是可以减少不必要的事件和代码,缺点是可能使代码更难以理解和维护。桥接模式(Bridge):是一种将抽象部分与它的实现部分分离的设计模式,使它们都可以独立地变化。优点是它可以使抽象和实现解耦,缺点是它可能会导致代码的复杂性增加。组合模式(Composite):是一种允许你把对象组合成树形结构来表示“部分-整体”层次结构的设计模式。优点是它可以使客户端对单个对象和复合对象的使用具有一致性,缺点是它可能会使代码更难以理解和维护,同时可能会导致复用性降低。装饰器模式(Decorator):是一种动态地为对象添加新的行为或状态的设计模式。优点是可以实现用户自定义的功能扩展,缺点是可能导致代码的复杂性增加。适配器模式(Adapter):是一种将一个类的接口转换成另一个类的接口的设计模式。优点是可以解决不兼容问题,缺点是可能导致代码的复杂性增加。策略模式(Strategy):定义一系列算法或策略,并将每一个策略封装起来。优点是可以方便地更换算法或策略,缺点是可能导致代码的复杂性增加。
0 评论