设计模式
- 一、设计模式简介
- 二、设计模式分类
- 1.创建型模式(Creational Patterns)
- 2.结构型模式(Structural Patterns)
- 3.行为型模式(Creational Patterns)
- 三、创建型模式
- 1.工厂模式
- 2.抽象工厂模式
- 3.单例模式
- 4.建造者模式
- 5.原型模式
- 四、结构型模式
- 1.适配器模式
- 2.外观模式
- 3.装饰器模式
- 4.桥接模式
- 5.代理模式
- 6.组合模式
- 7.过滤器模式
- 8.享元模式
- 五、行为型模式
- 1.责任链模式
- 2.命令模式
- 3.迭代器模式
- 4.模板模式
- 5.策略模式
- 6.观察者模式
- 7.访问者模式
- 8.解释器模式
- 9.中介者模式
- 10.备忘录模式
- 11.状态模式
- 12.空对象模式
- 总结
- 参考链接
一、设计模式简介
设计模式就是面对一些问题的最佳解决方案。众多软件开发人员在软件的开发过程中面临一些常见问题给出的解决方案,经过长期的验证和总结修正,形成了相对比较固定并且具有广泛适用性的解决模式。
设计模式主要是为了提高代码的重用性、让代码跟容易理解、保证代码的可靠性。设计模式的原则是面向接口编程而不是面向实现编程,优先使用组合对象而不是继承,尽可能复用已有类和对象。
二、设计模式分类
设计模式的参考书中总共提及23种设计模式,按照设计模式所解决的问题,这些模式可以分为创建型模式、结构型模式和行为型模式。
1.创建型模式(Creational Patterns)
在代码中优先需要创建对象,然后才能进行其他行为。创建对象,有可能需要隐藏创建逻辑、有可能整个应用只想创建一个对象,也有可能对象非常复杂。所以这些设计模式主要是为了满足以上创建对象时特殊需求的解决方案。
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
2.结构型模式(Structural Patterns)
实际开发工作中有很多时候,需要在已有的功能上进行开发工作,这样我们就需要尽可能复用已有的类、对象结构、接口等。结构型的模式主要解决如何构建灵活且可复用的类、对象、接口等,并利用组合、包装等方式复用已有功能。
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
3.行为型模式(Creational Patterns)
这些模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
三、创建型模式
1.工厂模式
2.抽象工厂模式
3.单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式涉及的类负责创建自己的对象,并确保只有单个对象被创建。
4.建造者模式
建造者模式使用多个简单的对象一步步构建一个复杂对象。用于将复杂的构建与其表现相分离,使得同样的构建过程可以创建不同表现的对象。一些组件常用建造者模式进行构建,比如Guava cahce组件的构建。
5.原型模式
原型模式用于高性能的创建重复的对象。利用已有的一个原型对象,快速地生成和原型对象一样的实例。比如Java中的Object clone()方法。
四、结构型模式
1.适配器模式
在软件系统中,需要将一些现有的对象放到新环境中,但是现有的对象不能满足新环境的接口。适配器模式作为两个不兼容接口的桥梁,将现有对象的接口转化成新环境的另外一个接口。
2.外观模式
外观模式主要是为了降低访问复杂系统的内部子系统时的复杂度,提供一个简化的接口用于客户端调用。
3.装饰器模式
装饰器模式主要是不使用继承的情况下,给一个类添加额外的一些功能。
4.桥接模式
桥接模式用于把抽象部分和实现部分分离,使得二者解耦可以独立变化。比如java的日志体系通过桥接模式将抽象的日志接口与具体实现进行了解耦。
5.代理模式
代理模式主要是想在访问一个类时做一些控制时,在访问者和真实对象间新增一个中间层。代理模式并不会增强被代理对象的功能(装饰器模式),也不会改变被代理对象的接口(适配器模式)。
6.组合模式
组合模式主要用于解决树型结构中的问题,可以象处理简单元素一样来处理复杂元素。这种模式中创建了一个包含自己对象数组的类,用于表示层次结构。比如目录层次非常适用于组合模式进行表示和操作。
7.过滤器模式
过滤器模式使用不同的标准过滤一组对象,通过逻辑运算以解耦的方式把他们连接起来,可以通过结合多个标准来获取单一标准。比如查询结果可以通过一系列标准进行结果过滤。
8.享元模式
五、行为型模式
1.责任链模式
责任链模式将请求的处理者连接成一条链,请求发送者将请求发送到这个处理链,每个处理者处理完成后会将此请求传递给下一个处理者。应用实例如Apache Tomcat对Encoding的处理、Structs2的拦截器等。
2.命令模式
命令模式是将一个请求封装成一个对象,从而用不同的请求对客户进行参数化。此模式可以将行为请求者与行为实现者进行解耦,实现二者的松耦合。
3.迭代器模式
迭代器模式就是在无须暴露出来内部表示的情况下,提供一种顺序访问一个聚合对象内部各个元素。此模式在Java中非常常见,比如Java中常用的集合类都可以通过迭代器模式进行内部元素的访问。
4.模板模式
模板模式是针对一些通用的操作步骤,定义一个操作的步骤骨架,将其中一些步骤延迟到子类中。此模式是的子类可以不改变整体结构,只需要重新定义其中一些步骤即可改变一些功能。
5.策略模式
策略模式定义一系列算法或者策略,使他们在运行过程中可以互相替换,而不用修改代码。
6.观察者模式
观察者模式主要是解决对象间一对多的依赖关系。当一个对象状态变化时,需要给其他对象通知。这样可以实现对象的易用性和低耦合。
7.访问者模式
访问者模式主要是将稳定的数据结构和易变的操作进行解耦。例如ASM中使用访问者模式对字节码进行修改。
8.解释器模式
9.中介者模式
10.备忘录模式
11.状态模式
12.空对象模式
总结
设计模式是在代码实践过程中总结出来应对特定问题的最佳解决方案。这些模式可以帮助开发者实现代码的复用、解耦和易于理解。
参考链接
1.设计模式