23种设计模式详解


总览

https://www.jianshu.com/p/198342409641

 

1,访问者模式:

访问者模式是不改变对象的定义,但允许新增不同的访问者,来定义新的操作。一般运用于一组稳定的数据结构,但可以有不同的操作来作用于这个结构中的元素。

https://www.cnblogs.com/wangbin2188/p/15160633.html

横看成岭侧成峰,远近高低各不同

 

2,观察者模式

资料1

https://blog.csdn.net/CSDN2497242041/article/details/120403205

资料2

https://www.cnblogs.com/ysocean/p/15627036.html

对象间一种一对多的依赖关系(注册),使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新(通知)

 

3,解释器模式

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

https://www.runoob.com/design-pattern/interpreter-pattern.html

关键在于这里

    @Override
    public boolean interpret(String context) {
        return expr1.interpret(context) && expr2.interpret(context);
    }

它并不是方法的递归,而是调用其他类的实现

 

4,迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。iterator就是迭代器模式

https://www.runoob.com/design-pattern/iterator-pattern.html

 

5,备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

https://www.runoob.com/design-pattern/memento-pattern.html

 

6,中介者模式:

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

https://www.runoob.com/design-pattern/mediator-pattern.html

 

 7,命令模式

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作

https://www.runoob.com/design-pattern/command-pattern.html

 

8,责任链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html

https://doc.wendoc.com/b3f16c74abc225542c01e7d96fd4b98d351399b8a.html

 

9,策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。

https://www.runoob.com/design-pattern/strategy-pattern.html

 

10,状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的

https://www.runoob.com/design-pattern/state-pattern.html

关键代码:

    public void doAction(Context context) {
        context.setState(this);
    }

 

11,模板方法模式

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

https://www.runoob.com/design-pattern/template-pattern.html

 

12,享元模式

在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。主要用于减少创建对象的数量,以减少内存占用和提高性能。

https://www.runoob.com/design-pattern/flyweight-pattern.html

顾名思义也就是共享同种属性的元素对象

private static final HashMap<String, Shape> circleMap = new HashMap<>();

 

13,组合模式

是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

可以理解为组织架构模式,一个对象,一个list子类集合,形成父子关系

https://www.runoob.com/design-pattern/composite-pattern.html

 

14,桥接模式

桥接模式的核心意图就是把类的实现独立出来,让他们各自变化。这样使每种实现的变化不会影响其他实现,从而达到应对变化的目的

https://www.runoob.com/design-pattern/bridge-pattern.html

 

15,适配器模式

所谓适配器模式是指一种接口适配技术,它可通过某个类来使用另一个接口与之不兼容的类,运用此模式,两个类的接口都无需改动。

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

https://www.runoob.com/design-pattern/adapter-pattern.html

 

16,外观模式

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

https://www.runoob.com/design-pattern/facade-pattern.html

 

17,原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

https://www.runoob.com/design-pattern/prototype-pattern.html

private static Hashtable<String, Shape> shapeMap = new Hashtable<String, Shape>();
        Shape cachedShape = shapeMap.get(shapeId);
        return (Shape) cachedShape.clone();

 

18,建造者模式

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

https://www.runoob.com/design-pattern/builder-pattern.html

 

19,单例模式

单例对象能保证在一个JVM中,该对象只有一个实例存在。

分为饿汉式和懒汉式,饿汉式立即加载,懒汉式延迟加载,懒汉式是线程不安全的,在多线程中很容易出现不同步的情况,如在数据库对象进行的频繁读写操作时.

如何让懒汉式变得即安全又高效? DCL双检查锁机制

https://www.runoob.com/design-pattern/singleton-pattern.html

 

20,工厂模式

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

https://www.runoob.com/design-pattern/factory-pattern.html

 

21,抽象工厂模式

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

https://www.runoob.com/design-pattern/abstract-factory-pattern.html

 

22,装饰者模式

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

https://www.runoob.com/design-pattern/decorator-pattern.html

 

23,代理模式

为其他对象提供一种代理以控制对这个对象的访问。

https://www.runoob.com/design-pattern/proxy-pattern.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM