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

    Writer
    |--TextWriter
    |--MediaWriter

    在对数据写入操作过程中,希望提升效率
    要对操作文本的对象提升效率,使用缓冲区技术。

    Writer
    |--TextWriter
      |--BufferedTextWriter
    |--MediaWriter
      |--BufferedMediaWriter

    这样的体系,为了增加一些功能,而通过产生子类来完成,会导致继承体系变得很臃肿
    重新思考体系的设计问题,都是在写的方法进行效率提升。
    为什么不 将该功能进行单独的封装?要提升哪个具体的对象,将哪个具体的对象交给该功能不就可以了吗?

    class BufferedWriter extends Writer
    {

    BufferedWriter(Writer w){}//高效
    /*
    BufferedWriter(TextWriter t){}

    BufferedWriter(MediaWriter m){}
    */
    }

    Writer
    |--TextWriter
    |--MediaWriter
    |--AudioWriter
    |--BufferedWriter

    TextWriter tw = new TextWriter();
    BufferedWriter bw = new BufferedWriter(tw);
    bw.write();

    解决:可以给对象提供额外的功能(职责),比继承更为灵活。
    起个名字:装饰设计模式(wrapper,decorator)
    装饰类与被装饰类都所属于同一个体系
    同时装饰类中会持有被装饰类的引用,Java中的BufferedReader就是采用的装饰设计模式。

    public class PersonDemo {
    
        public static void main(String[] args) {
            
            Man p = new Man();
            NewPerson pp = new NewPerson(p);//使用装饰类装饰一下
            pp.chiFan();
            
        }
    
    }
    
    class Person{
        void chiFan(){
            System.out.println("吃饭");
        }
        
    }
    class Man extends Person{
        void chiFan(){
            System.out.println("男人吃饭");
        }
    }
    
    class SubMan extends Man{//继承会使体系显得臃肿
        void chiFan(){
            System.out.println("开胃酒");
            super.chiFan();
            System.out.println("甜点");
            System.out.println("来一根");
        }
        
    }
    
    class NewPerson extends Person{//装饰类
        private Person p;
        NewPerson(Person p){
            this.p = p;
        }
        void chiFan(){
            System.out.println("开胃酒");
            p.chiFan();
            System.out.println("甜点");
            System.out.println("来一根");
        }
        
    }
  • 相关阅读:
    hdu 4825 Xor Sum (01 Trie)
    hdu 5877 Weak Pair (Treap)
    bzoj 1861: [Zjoi2006]Book 书架 (splay)
    bzoj 1503: [NOI2004]郁闷的出纳员 (splay)
    hihocoder#1333 : 平衡树·Splay2 (区间操作)
    「BZOJ1251」序列终结者 (splay 区间操作)
    二进制运算符的相关运算
    Bzoj 1085: [SCOI2005]骑士精神 (dfs)
    Bzoj 1083: [SCOI2005]繁忙的都市 (最小生成树)
    Bzoj 1088: [SCOI2005]扫雷Mine (DP)
  • 原文地址:https://www.cnblogs.com/qjlbky/p/5905601.html
Copyright © 2011-2022 走看看