Java23种设计模式概论

创建型模式

1、工厂模式

  •  简单工厂

可以是静态的,也可以是非静态的,一般都是静态的,做法是把对象的创建过程抽离出来封装出一个静态方法供外界调用。

  • 工厂方法

工厂方法是对简单工厂的升级,这时产品是一个接口的实现,因而有多种产品,所以工厂也有多个,与之一一对应生产,工厂也往往会抽象出一个接口,这时的子类工厂一般都做成单例。

  • 2、抽象工厂

抽象工厂是“工厂方法”的进一步升级,每个工厂生产一组产品,或者说一个产品的一组组件,形式上工厂方法是抽象工厂的只有单一产品的特例。

总结:需要工厂方法都是因为产品的生产过程比较复杂,不能直接new(),或者易变,因而抽离,方便后续维护。

3、单例模式

没必要存在多个实例,或者存在多个实例会消耗大量资源,就会想法做成单例。既然是单例,必须保证线程安全。

4、建造者模式

与抽象工厂类似,多了个指挥者/调用者,通过指挥者建造实例。

5、原型模式

通过一个原型可以克隆一个新的实例,一般用深复制实现(序列化和反序列化)。

结构型模式

6、适配器模式

  • 类的适配器

通过继承类、实现目标接口实现。

  • 对象的适配器

通过持有对象、实现目标接口实现。

  • 接口的适配器

通过一个抽象类屏蔽不需要的接口实现。

7、代理模式

与适配器结构类似,都是wrapper,代理类实现与被代理类同一接口(cgblib下为其子类),适配器模式适配成另一个接口。两者的目的和出发点不同,一个是为了适配,一个是为了“增强”,代理模式下,原接口可能是合适的,是为了在原逻辑前后做些事情使用了代理,参考AOP。

8、装饰模式

跟代理模式有点像,结构有所拓展,装饰者会有个接口,一般会有多个实现,目的是为了灵活切换装饰者,参考“换肤”功能。

9、外观模式/门面模式

一个不太像模式的模式,他的思想就是封装,对外提供一个较小的接口,隐藏所有的实现细节。

10、桥接模式

桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。

11、组合模式/合成模式

将有整体-部分的结构的每个组件统一结构化,典型的代表就是处理“树”。树中每个节点都是“一样的”Node,他们通过父节点、子节点构成层级结构,由于他们是同一类型,能大大简化实现逻辑,同时有着无限的拓展能力。

12、享元模式

是池化的思想,将各个无状态的bean用容器(比如map)存放,需要时取出,不用时放回,各个线程共享这些bean。

行为型模式

第一类 父与子

13、策略模式

将一个计算抽象成策略,通过使用策略完成计算,能避免在业务代码做繁杂的计算。策略模式的目的还是封装变化,或者切换策略。虽然能避免在业务代码写过多的if else,但是在策略里,或者选择策略时还是会有if else。参考商城过节打折,节后变回原价的销售策略。

14、模板方法

封装不变,开放变化给实现者。做法是一个抽象类,有个门面方法,门面方法调用几个其他方法。不想被子类修改的定义为final,需要子类实现的为抽象方法。行为由父类控制,子类实现某个细节。

第二类 两个类之间

15、观察者模式

就是常说的订阅-发布模式。

16、迭代模式

java.util下的集合类都是可迭代的,由于有这些强大的工具类,我们很少自己去构造新的可迭代的数据结构。

17、责任链

参考servlet中的Filter,各个过滤器构成了一个过滤器链。

18、命令模式

对象是属性和行为的集合,行为就是可执行的动作,他可以对应一个命令。

反过来,如果命令是一个标准,那么它的重要性就会扩大,占据命令接受者的风光。HTML的doc标准,它规定了一个按钮必须拥有哪些行为,比如点击。由于点击时处理细节是无法知道的,由于就有了“事件”一说,事件是对点击动作来说的,事件就是命令,而命令的接收者就是我们绑定在事件上的function。所以我们有理由相信,点击按钮时浏览器应该在内部触发执行了一个function,这个function通过一个钩子执行我们的绑定的function,如果我们不绑定,就不执行,这就是解耦。所以对于一个网页来说,浏览器很重要,它只知道是浏览器帮它完成了一切。

我们看到命令需要持有一个接收者,他是接收者的代理,他是个“站桩”。举个例子,老板、包工头、工人,老板要求包工头做哪些事情,包工头一律答应下来。包工头并不干活,工人干活。老板不不关心哪些活由哪个工人干,他也不会直接命令工人,他只命令包工头。所以包工头对老板很重要,工人不重要,工人离职了,包工头还可以换人干活。但反过来,工人需要有活干,它也不关系老板是谁,只要有人找包工头就行。

第三类 类的状态

19、备忘录模式

备忘录模式是备份的思想,将类当前的状态、信息备份起来,必要时恢复,不拘泥一个固定的结构。

20、状态模式

状态模式看起来简单,实际运用起来不简单,最典型的应用就是状态机。

第四类 通过中间类

21、访问者模式

将属性和行为分离,是一种回调思路。当不确定调用者如何利用自己时,构造一个接收访问的者方法accept,然后调用访问者的访问方法visit,将自己this作为参数传递过去。

参考景区,景区的大门不断accept游客visitor,游客一旦进来,景区就把自己交给了游客,游客想访问哪些具体的景点自己决定。

但如果景区以套票的形式,规定买什么样的票能访问哪些景点就成了普通的对象,拥有属性和特定的方法(服务)。

22、中介者模式

解耦需要沟通的各方,中介者就是消息中转站,vue的消息总线就是这个思路。

23、解释器模式

解释器模式不太好解释,构造自定义的语法,然后给出一个语句,能够解释它。各类编译器,语法解释器就是这种思路。由于比较底层,我们一般很少用到,一旦用到的项目都是高大上的项目。

参考 https://www.jianshu.com/p/c138a1d2be5e

参考

https://www.cnblogs.com/wangzhongqiu/p/6245820.html

猜你喜欢

转载自blog.csdn.net/flyfeifei66/article/details/81533190