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

xiaoxiao2021-02-28  107

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 {

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

}

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

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

}

class MilkCoffee implements Coffee { private Coffee coffee;

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

}

class IceCoffee implements Coffee { private Coffee coffee;

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

}

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

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

}

转载请注明原文地址: https://www.6miu.com/read-20708.html

最新回复(0)