装饰模式记录

来自于:http://www.cnblogs.com/lwbqqyumidi/p/3750634.html

在面向对象设计过程中,经常会遇到需要对现有的类的功能进行扩展,通常我们可以采用继承的方式。例如最近在做手机,一开始需要定义手机所应具有的功能:

 interface Phone{
     
     public void tel();
     
     public void sms();
     
 }

在此,为简单起见,只是定义了接打电话和收发短信功能。第一代手机T1终于面世了

 class T1 implements Phone{
  
      @Override
      public void tel() {
          System.out.println("可以实现基本的接打电话");
      }
  
      @Override
      public void sms() {
         System.out.println("可以实现基本的收发短信功能");
     }
     
 }

但是,在手机的每次版本上面都有新的功能增加,简单的做法就是每次有新的功能都会去继承T1;但是这样迭代下去;无限多的功能,依次这样去继承下去;到后面需要进行优化的时候;就会关联影响;使用装饰设计模式就可以解决类型的问题

 class T2 implements Phone {
 
      private Phone phone;
  
      public T2(Phone phone) {
          this.phone = phone;
      }
  
      // 增加的新的功能
      public void installApk() {
         System.out.println("可以安装Android软件了");
     }
 
     @Override
     public void tel() {
        phone.tel();
     }
 
     @Override
     public void sms() {
         phone.tel();
     }
 
 }

测试使用

  public class DecoratorTest {
  
      public static void main(String[] args) {
         //利用多态将原来的实现类和装饰类联系起来
          Phone t1 = new T1();
          Phone t2 = new T2(t1);
          t2.tel();
          t2.sms();
      }
  
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值