装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。可以有效地把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑。
使用场景:为已有功能动态地添加更多功能的一种方式。
下面以一个小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(); } }