设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
1 模板方法模式
解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用
新建继承类,继承类可以通过调用抽象类的主方法来掉用继承类重写的方法和公共方法
使用场景: 多个继承类之间的调用逻辑一样但是具体业务逻辑不同
2、适配器模式
类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
public class Source {
public void method1() {
System.out.println("this is original method!");
}
}
public interface Targetable {
/* 与原类中的方法相同 */
public void method1();
/* 新类的方法 */
public void method2();
}
/* 接口的方法必须实现,但是继承自父类的方法可以当做是实现了接口的方法*/
public class Adapter extends Source implements Targetable {
@Override
public void method2() {
System.out.println("this is the targetable method2!");
}
}
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
public class Wrapper implements Targetable {
private Source source;
//对象的适配,通过持有对象,掉用对象的方法,但是创建Wrapper时必须传入Source对象
//不一定是要调用Source的方法,也可以是需要Source的一些属性(调用get或者set方法)
// 有参构造方法
public Wrapper(Source source) {
super();
this.source = source;
}
@Override
public void method2() {
System.out.println("this is the targetable method!");
}
@Override
public void method1() {
source.method1();
}
}
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。
适配器模式总结:
适配器模式可以继承到Source中的所有方法,并且可以增加自己想要的方法(三个适配模式中都有这个功能,视情况使用哪个)(开闭原则?对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。)
参考: