我早上起床,光着身子。这时候我要穿衣服,先穿裤子再穿上衣。
我该怎样实现这个进程呢?
首先我是1个赤裸裸的人,并且我能被他人看到:
class Person {
protected String name;
protected String body;
public void show(){
System.out.println("身体");
}
}
然后,我要先穿裤子:
class Trousers extends Person{
private Person person;
public Trousers(Person person){
this.person = person;
}
@Override
public void show(){
System.out.println("穿了裤子的");
person.show();
}
}
这里之所以extends
Person,是由于Trousers通过Person穿着,具有了跟人1样的show
方法,便可被看到,同时还保证了裤子通过person变成了1个穿着裤子的人,本质变成了1个Person。
接下来需要穿衣服:
class Tshirt extends Person {
private Person person;
public Tshirt(Person person) {
this.person = person;
}
@Override
public void show(){
System.out.println("穿衣服的");
person.show();
}
}
一样道理,把某1个装潢类对象Person传入Tshirt以后,该Person在show的时候就先穿好衣服了。
在客户端实现1个人穿着整齐起床的代码以下:
public static void main(String[] args){
Person xiaomingPerson = new Person();
Trousers trousers = new Trousers(xiaomingPerson);
Tshirt tshirt = new Tshirt(trousers);
tshirt.show();
}
装潢模式有这样的特点,装潢A将某个对象P包装以后,A就是1种P;而装潢B将装潢A再包装以后,装潢B依然是1种P。
因此,在调用最原始对象P的show方法时,先调用外层装潢类B的show,然落后入A的show,最后才是P对象的show方法。因此,装潢类的终究表现类似于递归
,由外到内层层深入。
上一篇 国产软件为什么越来越流氓?
下一篇 用户态实现线程调度(任务调度)