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

    http://lgbolgger.iteye.com/blog/2154368 

    有时候为了传承某个类的一些功能,我们可以采用继承该类来获取功能,并可以通过覆写某些方法来进行功能加强。然而若想对一批类的功能进行加强,如果仍采用继承,不仅在代码上重复,并且不利于扩展。

    public interface Component {
    
        public void  fun();
    }
    
    public class ConcreteAComponent implements Component{
    
        @Override
        public void fun() {
            System.out.println("ConcreteAComponent");
        }
    
    }
    
    public class ConcreteBComponent implements Component{
    
        @Override
        public void fun() {
            System.out.println("ConcreteBComponent");
        }
    
    }

    如果采用继承的话,加强ConcreteAComponent,则需要写一个类继承ConcreteAComponent,加强ConcreteBComponent,则需要写一个类继承ConcreteBComponent,就会造成每当要加强一个类时就必须要新建一个类继承它,在代码上造成严重的重复。

    ConcreteTimeDecorator 针对的是接口Component ,不依赖于任何一个具体的Component ,所以每当要增强一个具体的Component时,不用再添加新的类,和继承就不一样了,这样更加容易扩展。

    public class ConcreteTimeDecorator implements Component{
        
        private Component component;
    
        public ConcreteTimeDecorator(Component component) {
            super();
            this.component = component;
        }
    
        @Override
        public void fun() {
            long start=System.currentTimeMillis();
            System.out.println("start at "+start);
            component.fun();
            long end=System.currentTimeMillis();
            System.out.println("end at "+end+",cost "+(end-start));
        }
    
    }
    public class ConcretePrintDecorator implements Component{
    
        private Component component;
    
        public ConcretePrintDecorator(Component component) {
            super();
            this.component = component;
        }
    
        @Override
        public void fun() {
            System.out.println("before real component run");
            component.fun();
            System.out.println("after real component run");
        }
    
    }
    ConcreteAComponent concreteAComponent=new ConcreteAComponent();
            
            ConcreteTimeDecorator concreteTimeDecorator=new ConcreteTimeDecorator(concreteAComponent);
            concreteTimeDecorator.fun();
            
            System.out.println("--------------------------------------------");
            ConcretePrintDecorator concretePrintDecorator=new ConcretePrintDecorator(concreteAComponent);
            concretePrintDecorator.fun();

     装饰器类与Component类紧耦合

  • 相关阅读:
    base -2 Number——进制转换
    AtCoder Crackers——水题
    血色先锋队——bfs
    Atcoder---ID排序模拟结构体
    101. 对称二叉树
    100. 相同的树
    95. 不同的二叉搜索树 II
    96. 不同的二叉搜索树
    JavaWeb学习总结(五十)——文件上传和下载(转载)
    145. 二叉树的后序遍历
  • 原文地址:https://www.cnblogs.com/jerrice/p/7390453.html
Copyright © 2011-2022 走看看