Abstraction pa = new RefinedAbstraction(new ConcreteImplementorA());
pa.operation();
Abstraction pb = new RefinedAbstraction(new ConcreteImplementorB());
pb.operation();
组合模式(Composite)
又称部分整体模式,是用于把一组相似的对象当作一个单一的对象。
组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
典型应用:操作系统的文件/目录结构
装饰者模式(Decorator)
别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合
装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式
装饰模式,突出的是运行期增加行为,这和继承是不同的,继承是在编译期增加行为
装饰模式包含四个角色:
抽象构件定义了对象的接口,可以给这些对象动态增加职责(方法);
具体构件定义了具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法);
抽象装饰类是抽象构件类的子类,用于给具体构件增加职责,但是具体职责在其子类中实现;
具体装饰类是抽象装饰类的子类,负责向构件添加新的职责
//抽象构件
public abstract class Person {
public abstract void eat();
}
//具体构件
public class NormalPerson extends Person {
public void eat() println("吃饭");
}
//抽象装饰类
public class PersonFood extends Person {
private Person person;
public PersonFood(Person person){
this.person = person;
}
public void eat() {
person.eat();
}
}
//具体装饰类
public class ExpensiveFood extends PersonFood {
public ExpensiveFood(Person person) {
super(person);
}
public void eat() {
super.eat();
eatSteak();
drinkRedWine();
}
public void eatSteak() println("吃牛排");
public void drinkRedWine() println("喝拉菲");
}