设计模式--装饰器和适配器
装饰器模式
顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。通常需要被一些类的功能做扩展的时候用到。装饰内持有被装饰类的实例,并且实现同一个接口。
装饰类通过构造器声明装饰对象。
他与代理模式的区别就是装饰器模式是is-a关系,而代理模式不一定是。例子这里就不举了
适配器模式
适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,类似于插头转换器,港版的手机充电需要通过转换接头将220v的电压转换成能用的电压。
适配器分为三种:类适配器、对象适配器、接口适配器
类适配器模式:
原理:通过继承来实现适配器功能。
public interface electricSourceB{
create220V();
}
public interface electricSource{
create36v();
}
public class VPower implements electricSource{
@Override
public void create36v() {
System.out.println("生产36V电压");
}
}
public class Adapter extends VPower implements electricSourceB{
create220V(){
create36v();
}
}
public class Clienter {
public static void main(String[] args) {
electricSourceB b= new Adapter();
p.create220V();
}
}
通过适配器使输入的电压变成36v
对象适配器模式:
原理:通过持有适配类的对象,实现被适配
同样用上面的例子,只是适配器实现做一点修改
public class Adapter implements electricSourceB{
private electricSource electricSource;
public Adapter(electricSource e){
this.electricSource=e;
}
create220V(){
electricSource.create36v();
}
}
public class Clienter {
public static void main(String[] args) {
electricSourceB p = new Adapter(new VPower());
p.isPs2();
}
}
接口适配器模式:
原理:通过抽象类来实现适配,通过抽象类(适配器)实现被适配接口,再用实现类实现抽象类,可以选择性的实现被适配对象。
适配器模式应用场景
类适配器与对象适配器的使用场景一致,仅仅是实现手段稍有区别,二者主要用于如下场景:
(1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。
(2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。
以上两个场景其实就是从两个角度来描述一类问题,那就是要访问的方法不在合适的接口里,一个从接口出发(被访问),一个从访问出发(主动访问)。
接口适配器使用场景:
(1)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。