码迷,mamicode.com
首页 > 其他好文 > 详细

装饰设计模式

时间:2016-09-25 12:02:53      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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("来一根");
    }
    
}

 

装饰设计模式

标签:

原文地址:http://www.cnblogs.com/qjlbky/p/5905601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!