装饰器模式:避免子类膨胀,是继承的一个替代模式,动态扩展一个实现类的功能。比如,人、衣服:被装饰类和装饰类,随意搭配
java中应用:
例如:BufferedReader in = new BufferedReader(new FileReader(“in.txt”));
继承结构
demo
继承结构
package decorater;
public interface Person {
public void getDress();
}
package decorater;
public class BlackPerson implements Person{
@Override
public void getDress() {
System.out.println("I am black");
}
}
package decorater;
public class WhitePerson implements Person {
@Override
public void getDress() {
System.out.println("I am write");
}
}
package decorater;
public abstract class DecoratorPerson implements Person{
public Person person;
public DecoratorPerson(Person dperson) {
this.person = dperson;
}
public void getDress(){
person.getDress();
}
}
package decorater;
public class TshirtPerson extends DecoratorPerson {
public TshirtPerson(Person dperson) {
super(dperson);
}
@Override
public void getDress() {
person.getDress();
setDress(person);
}
void setDress(Person person) {
System.out.println("I am in Tshirt");
}
}
package decorater;
public class DecoratTest {
public static void main(String[] args) {
Person p = new WhitePerson();
Person dp = new TshirtPerson(new BlackPerson());
Person dp1 = new TshirtPerson(new WhitePerson());
p.getDress();
System.out.println("----------");
dp.getDress();
System.out.println("----------");
dp1.getDress();
}
}
控制台输出:
I am write
----------
I am black
I am in Tshirt
----------
I am write
I am in Tshirt