定义:动态给一个对象添加一些额外的职责,Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。
要点:装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为
代码
package Decorator;
abstract class human {
public abstract void show();
}
class person extends human{
private String name;
public person(String name) {
this.name=name;
}
@Override
public void show() {
System.out.print("我是"+name+" 今天我要 ");
}
}
abstract class Decorator extends human{
private human human;
public void Decorate(human human) {
this.human=human;
}
@Override
public void show(){
human.show();
}
}
class TShirts extends Decorator{
public void show(){
super.show();
wereTShirts();
}
public void wereTShirts() {
System.out.print("穿T恤 ");
}
}
class Trouser extends Decorator{
public void show(){
super.show();
wereTrouser();
}
public void wereTrouser() {
System.out.print("穿裤衩 ");
}
}
class Sneakers extends Decorator{
public void show(){
super.show();
wereSneakers();
}
public void wereSneakers() {
System.out.print("打领带 ");
}
// ......
}
package Decorator;
public class Client {
public static void main(String[]args){
person person=new person("1e0zj");
TShirts tShirts=new TShirts();
Trouser trouser=new Trouser();
Sneakers sneakers=new Sneakers();
tShirts.Decorate(person);
trouser.Decorate(tShirts);
sneakers.Decorate(trouser);
sneakers.show();
}
}
输出:
我是1e0zj 今天我要 穿T恤 穿裤衩 打领带