1、装饰器模式的重点在于对原有功能的增强,比如:
public interface Person{
public void sleep();
},人的基本功能是睡觉,它的实现类是 :
public class BasePerson implements Person
{
public void sleep(){System.out.println("睡觉");
}
}
但人除了睡觉还得吃饭,需要在原来的基础上进行增强:
public class EatPerson implements Person{
private Person person;
public EatPerson(Person person){
this.person = person;
}
public void sleep(){
person.sleep();
System.out.println("吃饭");
}}
客户端的调用为:
Person person = new EatPerson(new BasePerson());
person.sleep();
打印为:睡觉 吃饭
2、适配器的重点是兼容,比如你是一屌丝,但是要伪装成高富帅吊MM,则只能这样做:
public interface GFSPerson{
public void diaoMM();
}
实现类是:
public class DiaoMMPerson implements GFSPerson{
private Person person;
public DiaoMMPerson(Person person){
this.person = person;
}
public void diaoMM(){
person.sleep();
System.out.println("掉MM");
}}
客户端的调用为:
GFSPersonperson = new DiaoMMPerson(new EatPerson(new BasePerson()));
person.diaoMM();
打印为:睡觉 吃饭 吊MM
3、代理的重点在隔离,也就是你猜猜我是谁,用高富帅的气息来伪装屌丝的本质
public class DiaoMMPerson implements Person{
private Person person;
public DiaoMMPerson(){
this.person = new EatPerson();
}
public void sleep(){
person.sleep();
System.out.println("吊MM");
}}
客户端的调用为:
Person person = new DiaoMMPerson();
person.sleep();
打印为:吃饭 吊MM
适配器跟装饰器都需要闯入原对象,而代理不需要,因为本身就是隔离屌丝本质嘛
打个养成读书习惯的广告,扫二维码可以免费领取月卡: