菜鸟柳--23种设计模式初学记录笔记(二)装饰者设计模式

来源:互联网 发布:如何优化搜索引擎 编辑:程序博客网 时间:2024/05/16 10:35

package DecoratorMethod;
/*优点:
可以实现不同要素类之间的排列组合
缺点:
要素类可以随机组合,容易获取违反业务逻辑的组合

扩展:
继承可以对某个方法进行功能增强,装饰设计模式也可以对某个方法进行功能增强,另外:
二者可以结合使用*/
/*需求:
黑咖啡
加奶的黑咖啡
加糖的黑咖啡
加冰的黑咖啡
加奶加糖的黑咖啡
加奶加冰的黑咖啡
加冰加糖的黑咖啡
加奶加糖加冰的黑咖啡

 功能:      煮 喝根据上述事务,设计一个类体系结构*/

public class Demo2 {
public static void main(String[] args) {
// 1.现在来实现一个功能,比如加糖加冰的黑咖啡
Coffee c = new BlackCoffee();
Coffee sc = new SugerCoffee(c);
Coffee ic = new IceCoffee(sc);
ic.zhu();
ic.drink();
// 2.现在要继续实现扩充功能,比如说加糖加倍
System.out.println(“—————————-“);
Coffee c1 = new BlackCoffee();
Coffee dsc = new DoubleSugerCoffee(c1);
Coffee ic1 = new IceCoffee(dsc);
ic1.zhu();
ic1.drink();
}

}

// 抽取出一个接口,具有煮和喝的两个功能
interface Coffee {
void zhu();

void drink();

}

// 定义一个黑咖啡类,实现了Coffee,上述功能都需要最终搞这个黑咖啡
class BlackCoffee implements Coffee {

@Overridepublic void zhu() {    System.out.println("煮咖啡");}@Overridepublic void drink() {    System.out.println("喝黑咖啡");}

}

// 以下的类均实现了Coffee类,都是添加了不同要素类
class SugerCoffee implements Coffee {
private Coffee coffee;

public SugerCoffee(Coffee coffee) {    this.coffee = coffee;}@Overridepublic void zhu() {    coffee.zhu();}@Overridepublic void drink() {    System.out.println("加糖");    coffee.drink();}

}

class MilkCoffee implements Coffee {
private Coffee coffee;

public MilkCoffee(Coffee coffee) {    this.coffee = coffee;}@Overridepublic void zhu() {    coffee.zhu();}@Overridepublic void drink() {    System.out.println("加奶");    coffee.drink();}

}

class IceCoffee implements Coffee {
private Coffee coffee;

public IceCoffee(Coffee coffee) {    this.coffee = coffee;}@Overridepublic void zhu() {    coffee.zhu();}@Overridepublic void drink() {    System.out.println("加冰");    coffee.drink();}

}

// 下边是通过继承的方式来实现对加糖方法的扩充
class DoubleSugerCoffee extends SugerCoffee {

public DoubleSugerCoffee(Coffee coffee) {    super(coffee);}@Overridepublic void drink() {    System.out.println("两包!");    super.drink();}

}

原创粉丝点击