GOF 23 种设计模式应用场景分析

写在前面

本文看下GOF 23 种设计模式应用场景,详细的还是通过文章给出参考链接学习下。

1:创建型

1.1:工厂设计模式

参考这篇文章 。

有几种产品需要创建,比如创建红苹果,青苹果,绿苹果,这些对象通过一个对象就可以。

1.2:抽象工厂设计模式

参考这篇文章 。

有几种产品需要创建,但是每种产品不能简单的通过一个对象来表示,比如联想主机,苹果主机,不管是哪种主机,都需要CPU对象,硬盘对象,风机对象等。

1.3:建造设计模式

参考这篇文章 。

一个对象的属性很多,且在不同的场景下对象创建时需要指定的的属性不同。可以有效避免设置大量的构造函数,或者是大量的调用read method,增加代码复杂度,降低可维护性。

1.4:原型模式

参考这篇文章 。

某个对象的创建成本比较高时,直接通过原型设计模式来克隆出一个,java中直接使用java.lang.Cloneable接口,之后调用clone方法即可(注意是浅拷贝)。

1.5:单例模式

参考这篇文章 。

当这个业务中只需要一个对象时。

2:结构型

2.1:适配器设计模式

参考这篇文章 。

当现有的接口无法直接满足客户端的需求时,比如入参不适配,返回值不适配等。

2.2:桥接设计模式

参考这篇文章 。

当一个产品的有多个变化的维度,并且每个维度到底有多少种变化是不确定的,如果是使用常规的继承方式的话可能会有非常非常多的子类,导致类过多而不好维护。

2.3:组合设计模式

参考这篇文章 。

当对象的结构是树形时,使用该设计模式,最典型的比如公司的层结构,家族族谱等。

2.4:装饰设计模式

参考这篇文章 。

当类现有的功能不足以满足客户端的需求,并且又不想使用继承的方式,或者是使用继承的方式不方便时,使用装饰设计模式。

2.5:门面设计模式

参考这篇文章 。

当某个类或者是某几个类的直接使用比较复杂,希望降低客户端的使用复杂度时,可以使用门面设计模式。

2.6:享元设计模式

参考这篇文章 。

当某个对象在程序中需要大量的使用,并且每个对象实例除了部分属性值不同外,其它的都相同,可以考虑使用享元设计模式,并且通过享元工厂创建享元对象还能实现对象缓存的功能。

2.7:代理设计模式

参考这篇文章 。

当一个对象因为安全问题,或者是对其的访问需要记录相关的日志,或者需要事务等时,可以考虑使用代理设计模式。

3:行为型设计模式

3.1:解释器设计模式

参考这篇文章 。
TODO

3.2:模板方法设计模式

参考这篇文章 。

当某个业务功能具有固定的操作步骤,但是不同的场景下有一个或者几个步骤要做的事情不同,其它的步骤都相同时,可以考虑使用模板方法设计模式。

3.3:责任链设计模式

参考这篇文章 。

当一个业务需要多个类中的一个或者是多个来完成时,可以考虑使用责任链设计模式。

3.4:命令设计模式

参考这篇文章 。

当一个类或者是几个类,具体的行为是通过外部的入参来决定时,可以考虑使用命令设计模式。

3.5:迭代器设计模式

参考这篇文章 。

当对象的内部有一组数据需要对外暴露,但又出于如下的原因不想让客户端直接访问内部的存储结构:

1:当内部存储结构发生变化时,客户端已有程序将不可用
2:客户端会破坏内部数据,造成不可控的bug

此时,可以使用迭代器设计模式,使用时可以直接使用jdk提供的java.lang.Iterable,和java.util.Iterator接口。

3.6:中介设计模式

参考这篇文章 。

TODO

3.7:备忘录设计模式

参考这篇文章 。

当需要记录对象在运行过程中的某个时刻的状态,并且在后续的某个时刻恢复到之前的某个时刻状态时,可以考虑使用备忘录设计模式。

3.8:观察者设计模式

参考这篇文章 。

当希望监听某个对象的状态,并在状态发生改变时做出响应,即典型的pub/sub,此时可以考虑使用观察者设计模式。

3.9:状态设计模式

参考这篇文章 。

当一个业务或者是一个对象内部某一个或者是几个状态发生变化,需要执行的操作不同时,可以考虑使用状态设计模式。

3.10:策略设计模式

参考这篇文章 。

当一个操作,根据外部入参的不同,可以通过不同的方式完成时,可以考虑使用策略设计模式,比如支付,可以使用微信支付,支付宝支付等。

3.11:访问者设计模式

参考这篇文章 。

当固定的几个元素(这里很关键,要固定的元素),在不同的业务场景下需要承担不同的职责不同时,可以考虑使用访问者设计模式,比如一个家庭有爸爸,妈妈,孩子,在如下不同的场景三者承担的职责不同:

做饭:
    爸爸职责:买菜
    孩子职责:洗菜
    妈妈职责:炒菜
孩子学习:
    爸爸职责:拿着鞋子站在孩子左边,孩子不好好学习了,打!!!
    妈妈职责:拿着棍子站在孩子右边,孩子不好好学习了,打!!!
    孩子职责:好好学习
外出旅游:
    爸爸职责:拿行李
    妈妈职责:美美的
    孩子职责:好好玩

写在后面

参考文章列表

面向对象设计原则和GOF23种设计模式 。

[永不磨灭的设计模式](https://shusheng007.top/2021/09/07/design-pattern/ 。

你可能感兴趣的:(设计模式,设计模式,GOF,23)