设计模式


单例模式

饿汉式
懒汉式
静态内部类
枚举类
序列化

工厂方法模式

应用场景:
1. 当你不知道该使用对象的确切类型的时候;
2. 当你希望为库或者框架提供扩展其内部组件的方法时;
主要优点:
1. 将具体产品和创建者解耦
2. 符合单一职责原则
3. 符合开闭原则

抽象工厂模式

提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

应用场景
程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的具体类时可以使用抽象工厂
优点:
1.可以确信你从工厂得到的产品彼此是兼容的。
2.可以避免具体产品和客户端代码之间的紧密耦合
3.符合单一职责原则
4.符合开闭原则

建造者模式

将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。

应用场景:
1. 需要生成的对象具有复杂的内部结构
2. 需要生成的对象内部属性本身相互依赖
3. 与不可变对象配合使用

优点:
1. 建造者独立,易扩展;
2. 便于控制细节风险。

原型模式

指原型实例指定创建的种类,并且通过拷贝这些原型创建新的对象。
应用场景:
当代码不应该依赖于需要复制的对象的具体类时,请使用Prototype模式。
优点:
1. 可以不耦合具体类的情况下克隆对象
2. 避免重复的初始化代码
3. 更方便的构建复杂对象

不过在实际应用中,用的更多的还是MapStruct或者BeanCopier。

享元模式

运用共享技术有效地支持大量细粒度的对象。
优点:
如果系统有大量类似的对象,可以节省大量的内存以及CPU资源。

门面模式

为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

应用场景:
1. 当您需要使用复杂子系统的有限但直接的接口时,请使用Facade模式。
2. 当您想要将子系统组织成层时,请使用Facade模式。
优点:
简化客户端的调度。

适配器模式
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。

应用场景:
1. 当你希望使用某些现有类,但其接口与您的其他代码不兼容时,请使用适配器模式。
2. 当你希望重用几个现有的子类,这些子类缺少一些不能添加到超类中的公共功能时,请使用该模式。

优点:
1. 符合单一职责原则
2. 符合开闭原则

策略模式

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者。
比如java里面Compartor的使用,Spring里面的InstantionStrategy.

模板方法模式

定义一个操作的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

观察者模式

定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知并更新。

优点:
1. 符合开闭原则;
2. 可以在运行时建立对象之间的关系;

责任链模式

为请求创建了一个接收者对象的链。
优点:
1. 请求的发送者和接收者解耦;
2. 可以控制执行顺序;
3. 符合开闭原则和单一职责原则;

 

posted @ 2023-03-06 00:21  君莫笑我十年游  阅读(15)  评论(0编辑  收藏  举报