装饰者模式体现了 敏捷开发思想中的 对类要 开放扩展,关闭修改.
例子:
一个person主类
若干装饰品类: 红衣服,蓝衣服,蓝鞋子,红鞋子
测试: new一个person 给他穿上红衣服蓝鞋子
code:
person接口:
public interface IPerson {
String decorate();
}
Person类:
package com.husw.design.decorator;
public class Person implements IPerson {
private String name;
public Person(String name) {
this.name = name;
}
public String decorate() {
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
装饰品:
红衣服:
package com.husw.design.decorator;
public class RedClothesPerson implements IPerson {
private IPerson p;
public RedClothesPerson(IPerson p) {
this.p = p;
}
public String decorate() {
return p.decorate() + ",red clothes";
}
public IPerson getP() {
return p;
}
public void setP(IPerson p) {
this.p = p;
}
}
package com.husw.design.decorator;
public class BlueClothesPerson implements IPerson {
private IPerson p;
public BlueClothesPerson(IPerson p) {
this.p = p;
}
public String decorate() {
return p.decorate() + ",blue clothes";
}
public IPerson getP() {
return p;
}
public void setP(IPerson p) {
this.p = p;
}
}
蓝鞋子:
package com.husw.design.decorator;
public class BlueShoesPerson implements IPerson {
private IPerson p;
public BlueShoesPerson(IPerson p) {
this.p = p;
}
public String decorate() {
return p.decorate() + ",blue shoes";
}
public IPerson getP() {
return p;
}
public void setP(IPerson p) {
this.p = p;
}
}
测试代码:
public class AppTest extends TestCase {
public void testApp() {
IPerson p = new Person("LiLei");
System.out.println(p.decorate());//赤身
p = new RedClothesPerson(p);
System.out.println(p.decorate());//穿上红衣
p = new BlueShoesPerson(p);
System.out.println(p.decorate());//穿上蓝鞋
}
}
运行结果:
LiLei
LiLei,red clothes
LiLei,red clothes,blue shoes