设计模式——装饰者模式与适配器模式

时间:2022-05-01 22:02:04

装饰模式(添加行为)


一、 定义:通过组合,装饰者模式动态的将责任添加到对象上,从而扩展对象的行为功能。


二、 概述:
a) 装饰者和被装饰对象都有相同的超类型,所以在需要被装饰者对象的场合都可以使用装饰者对象代替
b) 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,从而达到特定的目的(实现行为的添加)

c) 对象可以在任何时候被修饰,可以在运行时动态的,不限量的被任意个装饰者装饰


三、 类图

设计模式——装饰者模式与适配器模式



四、 实现伪代码
a) 组件
Interface Component{
void func1(){};
void func2(){};

}


b) 具体组件
Public class ConreteComponent extends Component{
void func1(){};
void func2(){};

}


c) 装饰者
Public class Decorator extends Component{
Component comp;
Public Decorator(Component comp){
This.comp=comp;
}
//需要添加的行为方法
void funcAdd(){};

}


d) 使用:当需要为具体组件添加新的行为时,可以如下使用,使得组件获得新的行为
Component comp= new Decorator(new ConreteComponent());


五、 装饰者模式实例:java IO类


适配器模式(将一个接口转换为另一个接口)


一、 定义:适配器模式将一个类的接口,转换为期望的另一个接口。使得原来接口不兼容的的类可以合作无间。


二、 概述:通过让一个适配器包装一个被适配者,将一个接口转换为另一个接口


三、 示意图

设计模式——装饰者模式与适配器模式



四、 实现伪代码
a) 目标接口
interface Target(){
void func1();
void func2();

}


b) 适配器
public class Adapter implements Target(){
private Adaptee ad;//持有被适配对象的引用
public Adapter (Adaptee ad){
this.ad=ad;
}
void func1(){
ad.fun(); //由被适配对象调用自己的方法实现该方法
}
void func1(){
ad.fun(); //由被适配对象调用自己的方法实现该方法
}

}


c) 被适配对象
public class Adaptee (){
void fun(){}

}


d) 由此可见,通过适配器将被适配对象封装成目标对象,使得被适配对象有目标对象一样的接口

五、 类适配器、对象适配器

a) 类适配器: 通过多继承实现,java不支持多继承
b) 对象适配器:通过组合实现,以上为对象适配器