设计模式的6大原则以及各个模式的使用场景(有记忆方法)

一、首先,我们必须明白,23种设计模式的本质上是为了6大原则服务,降低系统的耦合性,提高可扩展性和性能

面向对象设计6大原则:

1.单一职责原则(Single Responsibility Principle):一个类有且仅有一个引起它发生变化的原因,即一个应该只有一个职责,而非多个;

2.开闭原则open closed principle):开放扩展,关闭修改;

3.里氏替换原则(LSP liskov substitution principle):子类必须实现父类的抽象防范,但是不能重写父类已经实现的防范,即就是只要有父类出现的地方,都可以用子类来替代

4.接口隔离原则interface segregation principle):用很多个小接口来代替一个很大的总接口;

5.依赖倒置原则dependence inversion principle):上层模块不应该依赖于下层模块,细节不应该依赖于具体,它们2者都应当依赖于抽象

6.迪米特原则law of demeter LOD):最少知道原则,系统不应该依赖于与自己无关的接口

记忆方法:solid 稳定的 各个模式的英文首字母

二、设计模式的使用最关键在于必须符合它的使用场景,否则反而会适得其反,使用设计模式给后续带来麻烦,而且了解他的使用场景能更好的去理解设计模式。甚至去写出自己的合理设计模式

设计模式的分类

创建型模式,共五种:

单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式

结构型模式,共七种:

适配器模式、装饰者模式、代理模式、门面模式(外观模式)、桥梁模式、组合模式、享元模式。

行为型模式,共十一种:

策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

 

创建型的使用场景:(记忆方法:来一可以建2个工厂

创建型模式简单来说就是用来创建对象的。一共有五种:单例模式、建造者模式、工厂方法模式、抽象工厂模式、原型模式。
[单例模式] :确保某一个类只有一个实例,并且提供一个全局访问点。
[建造者模式]: 用来创建复杂的复合对象。
[工厂方法模式]:让子类来决定要创建哪个对象。
[抽象工厂模式:创建多个产品族中的产品对象。
[原型模式]:通过复制原型来创建新对象。

行为型的使用场景(记忆方法:观察一个中介是否负责任策略是,访问中介并命令他们去做事,然后看他们的状态如何,是不是做的不好的时候经常一堆解释,而不是在备忘录上记录下好的模板方法去改进)(迭代器不常用可以不记忆)

行为型模式主要是描述类或者对象是怎样交互和怎样分配职责的。一共有十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
[策略模式]:封装不同的算法,算法之间能互相替换。
[状态模式] :根据不同的状态做出不同的行为。
[责任链模式] :将事件沿着链去处理。
[观察者模式]:状态发生改变时通知观察者,一对多的关系。
[模板方法模式]:定义一套流程模板,根据需要实现模板中的操作。
[迭代器模式] :提供一种方法顺序访问一个聚合对象中的各个元素。
[备忘录模式] :保存对象的状态,在需要时进行恢复。
[访问者模式] :稳定数据结构中,定义新的操作行为。
[中介者模式]:将网状结构转变为星型结构,所有行为都通过中介。
[解释器模式] :定义语法,并对其进行解释。
[命令模式]:将请求封装成命令,并记录下来,能够撤销与重做。

结构型使用场景(记忆方法:农家乐的外观一般装配的比较地气,但是这也才合理嘛,并不影响受)

结构型模式主要是用于处理类或者对象的组合。一共有七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
[代理模式] :控制客户端对对象的访问。
[组合模式]:将整体与局部(树形结构)进行递归组合,让客户端能够以一种的方式对其进行处理。
[适配器模式] :将原来不兼容的两个类融合在一起。
[装饰者模式] :为对象添加新功能。
[享元模式] :使用对象池来减少重复对象的创建。
[外观模式] :对外提供一个统一的接口用来访问子系统。
[桥接模式]:将两个能够独立变化的部分分离开来。

参考文档:https://www.cnblogs.com/wq920/p/6143132.html

                 https://blog.csdn.net/jiayuqicz/article/details/88919742

                 https://www.meiwen.com.cn/subject/qoenyqtx.html

        

你可能感兴趣的:(学习,设计模式,java基础)