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

    说明:今天忽然想起好久之前学习的装饰者设计模式,总结了一下。原理就是:如果一个类已经被包装好了,我们想对这个类的某个方法在增加一些新的内容。

    如何在不需要对原先包装好的类上进行增加呢??

    分为三步:

    1、已经实现某些方法的类继承一个接口。那我也需要去继承这个接口。

    2、覆写这个接口的共同方法。(需要装饰的那个方法)

    3、需要把原先包装好的类的实例传递进来。

    下面是一个DEMO,以便于理解:

    class DecratorCat implements ICat{
    
        private ICat cat;
    
        public DecratorCat(ICat cat){
            
            this.cat = cat;
        }
        
        @Override
        public void run() {
            
            //添加 自己的逻辑 
            
            System.out.println("小黑 抓住 老鼠 只用 了  3秒 时间 ...");
            
            //调用 原 有的逻辑 
            cat.run();
        }
    }
    
    // 被装饰者
    class Cat implements ICat{
        
        
        public void run(){
            
            System.out.println("小黑的黑暗中奔跑 抓住了 一只 老鼠...");
            
        }
    }
    
    interface ICat{
        public void run();
    }
        // 2. 装饰设计模式 :   装饰者 和 被装饰者
        // 用的时候, 要满足的条件:
        /*
         *    两个条件: 
         *        第一个:    
         *            装饰者和被装饰者 必须要实现同样的接口或者 有共同 父类 
         *        第二个:
         *             被装饰者 必须要 传递给 装饰者 --- 装饰者持有 对被装饰者的引用
         */
        
        @Test
        public void test2(){
            
            DecratorCat cat = new DecratorCat(new Cat());
            
            cat.run();
            
        }
        
  • 相关阅读:
    [CF845G]Shortest Path Problem?
    [洛谷P4149][IOI2011]Race
    [洛谷P4178]Tree
    [AtCoder AGC27A]Candy Distribution Again
    [洛谷P3806]【模板】点分治1
    [洛谷P2634][国家集训队]聪聪可可
    [CF280C]Game on Tree
    [洛谷P3338][ZJOI2014]力
    [CF438D]The Child and Sequence
    [CF609E]Minimum spanning tree for each edge
  • 原文地址:https://www.cnblogs.com/tinyclear/p/6123025.html
Copyright © 2011-2022 走看看