我早上起床,光著身子。這時(shí)候我要穿衣服,先穿褲子再穿上衣。
我該怎樣實(shí)現(xiàn)這個(gè)進(jìn)程呢?
首先我是1個(gè)赤裸裸的人,并且我能被他人看到:
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
方法,便可被看到,同時(shí)還保證了褲子通過person變成了1個(gè)穿著褲子的人,本質(zhì)變成了1個(gè)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個(gè)裝潢類對(duì)象Person傳入Tshirt以后,該P(yáng)erson在show的時(shí)候就先穿好衣服了。
在客戶端實(shí)現(xiàn)1個(gè)人穿著整齊起床的代碼以下:
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將某個(gè)對(duì)象P包裝以后,A就是1種P;而裝潢B將裝潢A再包裝以后,裝潢B依然是1種P。
因此,在調(diào)用最原始對(duì)象P的show方法時(shí),先調(diào)用外層裝潢類B的show,然落后入A的show,最后才是P對(duì)象的show方法。因此,裝潢類的終究表現(xiàn)類似于遞歸
,由外到內(nèi)層層深入。