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

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();
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值