23种设计模式,纯简单里面,面试必备
文章目录
- 创建型设计模式
- 1.单例设计模
- 2.工厂设计模式
- 3.抽象工厂设计模式
- 4.建造者设计模式
- 5.原型设计模式
- 结构型设计模式
- 1.适配器设计模式
- 2.桥接设计模式
- 3.组合设计模式
- 4.装饰器设计模式
- 5.外观设计模式
- 6.享元设计模式
- 7.代理设计模式
- 行为型设计模式
- 1.访问者设计模式
- 2.模板方法设计模式
- 3.策略设计模式
- 4.状态设计模式
- 5.观察者设计模式
- 6.备忘录设计模式
- 7.中介者设计模式
- 8.迭代器设计模式
- 9.命令设计模式
- 10.责任链设计模式
- 11.解释器设计模式
创建型设计模式
1.单例设计模
全局唯一无可厚非,不做多解释
2.工厂设计模式
其实我们在开发过程中都用到了工厂设计模式的思想,工厂的思想就是只关注你给我什么结果不关注具体实现
3.抽象工厂设计模式
抽象工厂设计模式顾名思义就是自己只是定义好了模板让子类进行帮我实现
4.建造者设计模式
建造者设计模式很好理解!我们在定义构造器的时候,需要定义n个形参,但是需要定义n个构造器来应对不同的场景。我们通过建造者设计模式来设计的话只需要定义一个构造器就可以了。我们可以在类中定义一个内部类,这个内部类和类中有相同的字段,我们把内部类作为构造器的形参就可以解决需要写个构造器了
5.原型设计模式
原型设计模式更好理解!原型允许创建复杂对象的副本,其内部结构不变。在JAVA中的object父类中的clone拷贝及时原型设计模式的一种实现
结构型设计模式
1.适配器设计模式
适配器设计模式主要用于与期望类或者接口不兼容的问题。比如现在我想手机充电,但是插座不适配,我就需要一个转接头,这个转接头就是适配器所做的行为
2.桥接设计模式
桥接设计模式的设计理念就是抽象和实现进行解耦。它们可以独立的变化。比如JAVA中的子类继承父类。各自的实现都可以相互改变,子类也可以进行扩展
3.组合设计模式
组合设计模式的核心在于表示“部分—整体”的层次结构,并允许客户端以一致的方式处理单个对象和组合对象。这意味着无论是处理一个单独的对象还是处理由多个对象组成的复合对象,客户端代码都不需要知道具体的细节,只需要调用同一个接口即可。
4.装饰器设计模式
装饰器模式的核心在于能够在不改变现有类的前提下,动态地给对象添加新的功能。
其实装饰器模式很好理解比如子类继承父类
,子类代码不变,父类增加新的功能,子类可以获取,虽然有类似的理念,但也仅限于次。
具体的实现在代码中也很常见,定义接口类,抽象类进行实现接口类,装饰器类进行继承抽象类进行装饰,这才是完美的符合装饰器设计模式。
5.外观设计模式
这个过于简单不过多解释。大概意思就是在一群接口上套一层壳。对外提供这一个就行了,不需要提供内部的n个接口
6.享元设计模式
享元设计模式通过将对象的状态分为内部状态和外部状态来实现对象的共享。内或外部状态是指可以被共享的对象的状态,反之不可共享。享元设计模式的重点就是尽可能的共享,减少内存开支。
一下代码就类似于享元的一种表现
String s1 = “hello”;
String s2 = “hello”;
System.out.println(s1 == s2); // 输出 true
7.代理设计模式
它允许通过提供一个代理对象来控制对另一个对象的访问。这种模式可以用于实现许多功能,例如远程代理、虚拟代理、保护代理等。
包括我们熟知的jdk动态代理以及cglib动态代理也是代理的一种表现
行为型设计模式
1.访问者设计模式
访问者模式好比就是让新来的专家(访问者)给现有的物品(对象)做检查或维修,而不需要改变物品本身。这样可以不断添加新服务,而不改变原有物品。
2.模板方法设计模式
模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤的具体实现延迟到子类中。
这听上去和抽象工厂设计模式类似。
但也有本质的区别
–模板方法设计模式是定义一个算法骨架,
允许子类在特定的点上有自己的实现
–抽象工厂设计模式用来创建一系列相关的依赖对象而不是具体的类
3.策略设计模式
策略模式很简单,它定义了一系列算法,并将每个算法封装在独立的策略类中,使得它们可以互相替换。通过使用策略模式,可以使得算法的变化独立于使用算法的客户端。
举个简单的例子比如我们定义了四个方法加减乘除
4.状态设计模式
它允许对象在其内部状态发生改变时改变它的行为。通过使用状态模式,可以将一个对象的状态从其行为中分离出来,使得对象可以根据状态来改变其行为。
也可以简单理解,一个对象的状态发生改变时,需要走一遍IF else …
5.观察者设计模式
状态设计模式
其中一个对象(称为主题或可观察者)状态发生变化时会自动通知其他依赖该对象的对象(称为观察者),使得观察者可以更新自己的状态。
好比动物世界的什么老鼠站岗放哨的,老鹰来了赶紧发齐警报,其他老鼠赶紧藏起来。
6.备忘录设计模式
备忘录设计模式超级好理解,备份,数据备份。还需要一个负责人进行恢复备份。
7.中介者设计模式
中介者设计模式的思想就是它能够减少对象之间的依赖关系,使得对象不需要显示地相互引用,从而使耦合性降低,系统易于扩展。
好比mq就可以理解为中介者设计模式的一种实现
8.迭代器设计模式
这个不过多解释!在JAVA代码中很多集合底层都是用了迭代器。迭代器主要用于遍历
9.命令设计模式
其实命令设计模式很好理解,因为我们生活中经常接触到。比如我给你下达命令,你去执行该命令
10.责任链设计模式
在责任链模式中,通常将每个处理者看作一个链表中的节点,每个节点都包含了处理请求的方法以及后继节点的引用。
如果这个节点不能处理它,那么该请求就会被转发给链表中的下一个节点,直到有一个节点能够处理它为止。
也可以理解为 if else吧
其实很多设计模式和技术都有相同之处以及不同之处,只是在不同的角度上来表达不同的观点。
11.解释器设计模式
解释器设计模式就是用来解析规则的
好比我现在要计算加减法 比如 “11”+11=22
一个是字符串一个是数字,就要计算出来给我正确答案
其实有很多设计模式思想都是差不多的,只是站在了不同的角度来描述不同进行解决这些问题行为而已。