装饰模式是一种结构型设计模式。其使用一种对客户端透明的方式,来动态的扩展对象的功能。同时,它也是继承关系的一种替代方案之一。定义:动态地给一个对象添加一些额外的职责。就增加个来说,装饰模式比生成子类更为灵活。
所以,我们可以在需要透明而且动态地扩展类的功能时,所以装饰模式。
1 创建一个被装饰的原始对象,也可以是接口还在抽象类:
package decoratorpattern2;
public abstract class Person {
public abstract void dressed();
}
2 创建一个原始装饰对象的具体类,作为被装饰的对象:
package decoratorpattern2;
public class Boy extends Person{
@Override
public void dressed() {
System.out.println("boy穿男装");
}
}
3 创建装饰着来装饰Boy类:
package decoratorpattern2;
public abstract class PersonCloth extends Person{
protected Person person;
public PersonCloth(Person person) {
super();
this.person = person;
}
@Override
public void dressed() {
person.dressed();
}
}
4 创建装饰着的具体实现类,来装饰对象:
package decoratorpattern2;
public class ExpensiveCloth extends PersonCloth{
public ExpensiveCloth(Person person) {
super(person);
}
private void dressShirt(){
System.out.println("穿T恤");
}
private void dressJean(){
System.out.println("穿牛仔");
}
@Override
public void dressed() {
super.dressed();
dressShirt();
dressJean();
}
}
5 测试运行结果:
package decoratorpattern2;
public class Client {
public static void main(String[] args) {
Person person = new Boy();
PersonCloth cheapCloth = new CheapCloth(person);
cheapCloth.dressed();
PersonCloth expensiveCloth = new ExpensiveCloth(person);
expensiveCloth.dressed();
}
}
输出结果:
boy穿男装
穿短裤
boy穿男装
穿T恤
穿牛仔