装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。可以有效地把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑。
使用场景:为已有功能动态地添加更多功能的一种方式。
下面以一个小Demo为例讲解:Tshirts(Shoe、Kuzi) extends Finery ,Finery extends Person 。Decorate为测试类
(1)被装饰的类
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("装扮的"+name);
}
}
(2)装饰类
public class Finery extends Person {
protected Person mPerson;
public void decorate(Person person) {
mPerson = person;
}
@Override
public void show() {
if (mPerson != null) {
mPerson.show();
}
}
}
(3)具体装饰类Tshirt (Shoe和Kuzi同理)
public class TShirts extends Finery {
@Override
public void show() {
System.out.println("TShirts");
super.show();
}
}
(4)测试类
/**装饰者模式*/
public class Decorate {
public static void main(String[] args) {
Person mPerson = new Person();
mPerson.setName("董永康");
TShirts mTShirts = new TShirts();
Kuzi mKuzi = new Kuzi();
Shoe mShoe = new Shoe();
mTShirts.decorate(mPerson);
mKuzi.decorate(mTShirts);
mShoe.decorate(mKuzi);
mShoe.show();
}
}