zoukankan      html  css  js  c++  java
  • 装饰模式Decrator

    装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

    装饰模式可以在不创造更多的子类的模式下,将对象的功能加以扩展。

    装饰模式与类继承的区别:

    1) 装饰模式是一种动态行为,对已经存在类进行随意组合,而类的继承是一种静态的行为,一个类定义成什么样的,该类的对象便具有什么样的功能,无法动态的改变。

    2) 装饰模式扩展的是对象的功能,不需要增加类的数量,而类继承扩展是类的功能,在继承的关系中,如果我们想增加一个对象的功能,我们只能通过继承关系,在子类中增加两个方法。

    3) 装饰模式是在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能,它是通过创建一个包装对象,也就是装饰来包裹真是的对象。

    4) 装饰模式把对客户端的调用委派给被装饰的类,装饰模式的关键在于这种扩展完全透明的。

    package com.qinsoft.design;
    
    /**
     * 装饰模式--结构型
     */
    interface Component
    {
       public void doSomething();
    
    }
    
    //构建角色:
    class ConcreteComponent implements Component
    {
       @Override
       public void doSomething()
       {
          System.out.println("功能A");
       }
    }
    
    //装饰角色:
    class Decorate implements Component
    {
       private Component component;
    
       public Decorate(Component component)
       {
          this.component = component;
       }
       
       @Override
       public void doSomething()
       {
          component.doSomething();
       }
    }
    
    //装饰角色1:
    class ConcreteDecorate1 extends Decorate
    {
       public ConcreteDecorate1(Component component)
       {
          super(component);
       }
       
       @Override
       public void doSomething()
       {
          super.doSomething();
          this.doAnotherDosomething();
       }
       
       private void doAnotherDosomething()
       {
          System.out.println("功能B");
       }
    }
    
    
    //客户端
    public class Decrator
    {
    
       public static void main(String[] args)
       {
    
          Component component = new ConcreteDecorate1(new ConcreteComponent());
          component.doSomething();
       }
    }
  • 相关阅读:
    java工程师面试总结
    多线程面试题
    冒个泡
    给大家简单介绍一下:Elasticsearch
    单点登录
    (jQuery)Cookie记住用户名和密码
    我们需要循序渐进的代码重构
    Java序列化(Serialization)的理解
    Java对象序列化
    【武】做一个有自控力的人,开始你的时间规划吧!
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2965975.html
Copyright © 2011-2022 走看看