设计模式
Posted jingpeng77
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式相关的知识,希望对你有一定的参考价值。
1.适配器模式
适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式有“类适配器”和“对象适配器”两种不同的形式。
类适配器模式:
类的适配器模式是把适配的类的API转换成为目标类的API。
UML类图:
在上图中可以看出:
- 冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。
- 解决方案:为使Target能够使用Adaptee类里的SpecificRequest方法,故提供一个中间环节Adapter类(继承Adaptee & 实现Target接口),把Adaptee的API与Target的API衔接起来(适配)。
- Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的
创建适配器类(Adapter):
//适配器Adapter继承自Adaptee,同时又实现了目标(Target)接口。 public class Adapter extends Adaptee implements Target { //目标接口要求调用Request()这个方法名,但源类Adaptee没有方法Request() //因此适配器补充上这个方法名 //但实际上Request()只是调用源类Adaptee的SpecificRequest()方法的内容 //所以适配器只是将SpecificRequest()方法作了一层封装,封装成Target可以调用的Request()而已 @Override public void Request() { this.SpecificRequest(); } }
定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标:
public class AdapterPattern { public static void main(String[] args){ Target mAdapter = new Adapter(); mAdapter.Request(); } }
对象适配器
与类的适配器模式相同,对象的适配器模式也是把适配的类的API转换成为目标类的API。
与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。
在上图中可以看出:
- 冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。
- 解决方案:为使Target能够使用Adaptee类里的SpecificRequest方法,故提供一个中间环节Adapter类(包装了一个Adaptee的实例),把Adaptee的API与Target的API衔接起来(适配)。
Adapter与Adaptee是委派关系,这决定了适配器模式是对象的。
class Adapter implements Target{ // 直接关联被适配类 private Adaptee adaptee; // 可以通过构造函数传入具体需要适配的被适配类对象 public Adapter (Adaptee adaptee) { this.adaptee = adaptee; } @Override public void Request() { // 这里是使用委托的方式完成特殊功能 this.adaptee.SpecificRequest(); } }
定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标:
public class AdapterPattern { public static void main(String[] args){ //需要先创建一个被适配类的对象作为参数 Target mAdapter = new Adapter(new Adaptee()); mAdapter.Request(); } }
2.简单工厂模式、工厂模式、抽象工厂模式
https://www.cnblogs.com/heliusKing/p/11577837.html
3.模板方法模式
模板方法模式是通过父类建立框架,子类在重写了父类部分方法之后,在调用从父类继承的方法,产生不同的效果,通过修改子类,影响父类行为的结果,模板方法在一些开源框架中应用非常多,它提供了一个抽象类,然后开源框架写了一堆子类,如果需要扩展功能,可以继承此抽象类,然后覆写protected基本方法,然后在调用一个类似TemplateMethod()的模板方法,完成扩展开发。
以上是关于设计模式的主要内容,如果未能解决你的问题,请参考以下文章