装饰模式 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

<code class="hljs">装饰模式-动态的给对象添加新功能,

装饰模式

。</code>

    装饰:所谓锦上添花,装饰就是给加上“花”而它的核心本质还是“锦”。

    那么难免就有一个疑问那就直接加花就可以了啊,为什么要弄一个装饰模式出来呢?

    举个例子:一个家伙要和面,准备蒸个馒头吃吃。然后准备一些面,加水,呀,水多了,加面…无穷尽也~

    我们把装饰单独拿出来实现主体和附加功能的分离,在不使主体变得臃肿的情况下添加需要的新功能。再拿蒸馒头举例,蒸馒头吃的是面,那面就是主体,以这个面为核心,我们加点配料或者加个陷,或者弄几个花纹美化一下。如果不把装饰拿出来是什么样的呢:

<code class="hljs" php="">class ManTou{    addMian();}class addHuaWen extends ManTou{    addMian();    ---------    addHuawen();}class addRouXian extends ManTou{    addMian();    ----------    addRouXian();}</code>

    这样我们就反复使用主体,进入加面加水的循环,虽然达到了我们要加配料的目的,但是主体被滥用了,你可能只想做两个馒头,最后蒸了一锅。

    看看装饰模式,馒头还是那个馒头,没有引发血案,只是个馒头

<code class="hljs" scala="">class ManTou{    addMian();}class decorator extends ManTou{    protected ManTou manTOu;    makeManTou(ManTou manTou) {        this.manTou = mantou;    }    @Override    addMian();}class addHuawen extends decorator{    @Override    addMian(){        super.addMian();        addHuawen();}class addRouXian extends decorator{    @Override    addMian() {        super.addMian();        addRouXian();}</code>

    体现装饰模式的优势就在客户端的代码了:

<code class="hljs" cs="">static void main(String[] args) {    ManTou m = new ManTou();    addHuaWen h = new addHuaWen();    addRouXian r = new addRouXian();    h.makeManTou(m);    r.makeManTou(h);    r.addMian();</code>

    通过客户端的实现可以发现就像穿衣服一样,一层套一层的加上去了我们的新需求,当你再想加个颜色,只要再写一个addColor()即可,客户端修改一下即可,不需要去动addMian()这个主体,符合了开放和封闭原则,

电脑资料

装饰模式》(https://www.unjs.com)。

    Uh… 最后想想做馒头这个例子举得不太好可能不利于理解,不过没想到更好的呢,想到再写~

最新文章