(1)概念
即为对象在原有功能之上,动态的增加更多的功能。
(2)核心
1.装饰类和被装饰类,继承同一个类A(或实现同一个结构)
2.所有装饰类都维护一个A的对象,用来调用原来的功能
(3)代码
装饰和被装饰类都要继承的总父类
public interface Decorate
{
public abstract void showAppearence();
}
被装饰的人:
public class Person implements Decorate
{
@Override
public void showAppearence()
{
System.out.println("this is me");
}
}
总的服饰类:
public abstract class Cloth implements Decorate
{
protected Decorate person = null;
}
T恤类:
public class TShirt extends Cloth {
@Override
public void showAppearence()
{
System.out.println("wear t-shirt");
person.showAppearence();
}
public TShirt(Decorate person)
{
this.person = person;
}
}
外套类:
public class Coat extends Cloth {
@Override
public void showAppearence()
{
System.out.println("wear coat");
person.showAppearence();
}
public Coat(Decorate person)
{
this.person = person;
}
}
客户端:
public class Client {
public static void main(String[] args)
{
Person p = new Person();
Coat coat = new Coat(new TShirt(p));
coat.showAppearence();
}
}
结果为:
wear coat
wear t-shirt
this is me
(4)为何不用继承?
使用继承会导致类数量过多