【结构型模式二】装饰模式-动态地增加功能

1. 前情提要

我们在简单工厂模式实现了将计算器的加减乘除功能的实现封装起来,让客户端直接调用这些操作类的父类的运算方法,即可得到运算结果。但客户端需知道这些操作类的父类叫啥名字,才能调用它的运算功能。
客户端代码长这样:

public int computeByFactory(int num1, String operator, int num2) throws Exception {
   
    Operation operation = OperationFactory.createOperation(operator);
    return operation.operate(num1,num2);
}

在策略模式实现了使用一个策略上下文类,将调用这些操作类的父类的运算方法的过程再做封装,这样客户端连这些操作类的父类都无需知道,就可以直接通过策略上下文类调用运算方法,使得各个运算的实现和调用逻辑完全分离。
客户端代码长这样:

public int computeByStrategy(int num1, String operator, int num2) throws Exception {
   
    return OperationContext.execute(num1,operator,num2);
}

2. 计算器又要加功能

现在如果要增加一个功能,在计算结果之前,要按指定的顺序显示出颜色。比如下面的代码,在打印结果之前,增加了按顺序打印颜色的功能。

 public int computeAndShowColor(int num1, String operator, int num2) throws Exception {
   
        showRed();
        showYellow();
        showYellow();
        showRed();
        ...
        showBlue();
        return OperationContext.execute(num1,operator,num2);
  }
  private void showRed() {
   
      System.out.println("paint red!");
      System.out.println("hahaha!");
  }
  private void showYellow() {
   
      System.out.println("oh!");
      System.out.println("paint yellow!");
  }
  private void showBlu
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值