我早上起床,光著身子。這時候我要穿衣服,先穿褲子再穿上衣。
我該怎樣實現(xiàn)這個進(jìn)程呢?
首先我是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個穿著褲子的人,本質(zhì)變成了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以后,該P(yáng)erson在show的時候就先穿好衣服了。
在客戶端實現(xiàn)1個人穿著整齊起床的代碼以下:
public static void main(String[] args){
Person xiaomingPerson = new Person();
Trousers trousers = new Trousers(xiaomingPerson);
Tshirt tshirt = new Tshirt(trousers);
tshirt.show();
}
裝潢模式有這樣的特點(diǎn),裝潢A將某個對象P包裝以后,A就是1種P;而裝潢B將裝潢A再包裝以后,裝潢B依然是1種P。
因此,在調(diào)用最原始對象P的show方法時,先調(diào)用外層裝潢類B的show,然落后入A的show,最后才是P對象的show方法。因此,裝潢類的終究表現(xiàn)類似于遞歸
,由外到內(nèi)層層深入。