装饰设计模式

装饰设计模式:对一组对象的功能进行增强时,就可以使用该模式来解决问题。

//装饰模式。
public class Persondemo {
    public static void main(String[] args)
    {
        person p = new person();
        newperson np = new newperson(p);
        np.chifan();
    }
}
class person
{
    void chifan()
    {
        System.out.println("吃饭");
    }
}

class newperson{
    private person p;
    newperson(person p)
    {
        this.p = p;
    }
    public void chifan()
    {
        System.out.println("开胃酒");
        p.chifan();
        System.out.println("甜点");
    }
}

装饰和继承都能实现一样的特点:进行功能的扩展增强。区别?

比如有一个继承体系:
writer
|——textwriter :用于操作文本。
|——mediawriter :用于操作媒体
想要对操作的动作进行效率的提高,按照面向对象,可以通过继承对具体的进行功能扩展。效率提高需要加入缓冲技术。
writer
|——textwriter :用于操作文本。
|——BufferedTextwriter :加入了缓冲技术的操作文本的对象。
|——mediawriter :用于操作媒体
|——BufferedMediaWriter
其实这样做并不理想:如果这个体系进行功能扩展,又多了流对象,如果流要提高效率,是不是也要继承呢?是,这时候发现只提高功能进行的继承,导致继承体系的臃肿,不够灵活。

重新思考这个问题?

既然加入的是同一种技术——缓冲,前一种是将缓冲和具体对象相结合,可不可以将缓冲进行单独的封装呢,那个对象需要缓冲就将哪个对象和缓冲关联。
所以装饰比继承灵活。
特点:装饰类和被装饰类必须所属同一个接口或父类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值