装饰设计模式

装饰设计模式

对一组对象的功能进行增强时,就可以使用该该模式进行
问题的解决
    public class Io18_1 {
        public static void main(String[] args) {
            Person p=new Person();
//          p.chifan()
            NewPerson p1=new NewPerson(p);//装饰
            p1.chifan();

            NewPerson2 p2=new NewPerson2();//继承
            p2.chifan();
        }
}

class Person{
    void chifan(){
        System.out.println("吃饭");
    }
}
//这个类的出现是为了增强person而出现的。
class NewPerson{
    private Person p;
     NewPerson(Person p){
         this.p=p;
     }
     public void chifan(){
         System.out.println("开胃酒");
         p.chifan();
         System.out.println("甜酒");
     }


}

class NewPerson2 extends Person{
        void chifan(){
             System.out.println("开胃酒");
             super.chifan();
             System.out.println("甜酒");
        }
}

字符流-缓冲区-装饰设计模式和继承的区别

  • 装饰和继承都能实现一样的特点,进行功能的扩展增强。

    • 有什么区别呢?
      • 举例
    • 首先有一个继承体系

    • Writer
    • |–TextWriter:用于操作文本
    • |–MediaWriter:用于操作媒体

    • 想要对操作的动作进行效率的提高,

    • 按照面向对象,可以通过继承对具体的进行功能的扩展。
    • 效率提高需要加入缓冲技术。

    • Writer

    • |–TextWriter:用于操作文本
    • |–BufferTextWriter:加入了缓冲技术的操作文本的对象。
    • |–MediaWriter:用于操作媒体
    • |–BufferMediaWrite:

    • 到这里就可以了。但是这样做好像并不理想。


      • 如果这个体系进行功能扩展,就多了流对象。
    • 那么这个流要提高效率,是不是也要产生子类呢?是。这时就会发现只为提高功能,进行的继承。
    • 导致继承体系越来越臃肿,不够灵活。

    • 重新思考这个问题?

    • 既然加入的都是同一种技术–缓冲。
    • 前一种是让缓冲和具体的对象相结合。
    • 可不可以将缓冲进行单独的封装,哪个对象需要缓冲就将哪个对象和缓冲关联。

class BufferWriter{1
BufferWriter(BufferTextWriter w){

}

BufferWriter(BufferMediaWrite w){

}

}

2比1好很多,体现了多态的好处
class BufferWriter{2
BufferWriter(Writer w){

}
}

Writer
|–TextWriter:用于操作文本
|–MediaWriter:用于操作媒体
|–用于提高效率

装饰比继承灵活。

特点:装饰类和被装饰类都必须所属同一个接口或者父类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值