首页 人才招聘 成功案例 在线留言 联系我们
当前位置: 主页 > 企业荣誉 >
设计模式学习笔记-装饰模式 - Wang Juqiang

作者:admin 2017-10-23阅读:

1. 概述

  动态地向客体添加额定的义务,在添加功用同意,装饰器榜样比体格的亚纲更灵巧。。

  规律:添加东西修正类来包装原始类,额外免费给予普通是在原文的客体作为参量的修正。时新装饰功用的发生,纵然,用不着新功用的评价,它可以径直地让与类射中靶子原始办法。。修正后的类得具有与原始类完全同样的的喷嘴。。

2. 角色线圈架

   萃取物结构零件(构件):东西萃取物喷嘴的下定义,动态添加的义务,这些客体。

   使凝固破土(使凝固构件):下定义东西详细的客体,您还可认为大约客体添加稍微义务。。

   装饰类(装饰) 萃取物类的装饰,承受的子组件部件,从内部类放大子组件部件类应变量。

   详细的装饰(concretordecorator):本着良心的向安排客体添加义务。

3. 榜样解读

   装饰决意的普通类别

  

   装饰榜样的盛行行为准则

4. 榜样总结

   优点

    .1 每个装饰用的只关怀它自己的功用。,用不着关怀方法添加到客体链中。。它是由setcomponent装饰办法发生,因而,他们的职责或工作是单。

    .2 大约类和动态职责或工作的中心职责或工作。假定we的所有格形式向主类添加新应变量,率先,它违背了开闭道义,二是高处主类的复杂的事物。

    .3 比动态承受更灵巧 比动态承受和客体,Decorator榜样给予了更灵巧的方法高处客体的职责或工作,你可以运用添加和断裂办法,在运转时添加和取代带有装饰的职责或工作

   缺陷

    4. 发生很多地小的客体,采取Decorator体系设计榜样有意发生很多地显现像小客体的东西。,这些客体最好的这么样他们相互的衔接的形形色色的。

   专心致志场面

    4. 当你需求动态地添加更多的功用到目前的的functionalit。

    4. 类的中心应变量用不着更改。,只需求添加新功用。

5. 运用建议:全副武装的兵士!不注意无论哪些装备(中心功用),你可以用拳头和拳头。;装备匆忙翻找,可以标准拍摄;装备大量地机枪,你可以火;装备有芝麻菜发射者,可以高射炮。

   类图的设计

  

   行为准则发生

////// 合身类,等效的成分
    ///publicabstractclass Equipment
    {

        publicabstractvoid Attack();
    }

    ////// 兵士类,从合身
    ///publicclass Soldier : Equipment
    {
        public Soldier()
        {
            // 结构零件应变量        }

        ////// 无论哪些兵器的中心功用不在场的
        ///publicoverridevoid Attack()
        {
            ("用拳头和拳头袭击!");
        }
    }

    publicabstractclass EquipDecorator : Equipment
    {
        protected Equipment equipment;

        ////// 高处合身,运用该办法来动态地给兵士高处合身
        //////publicvoid SetComponent(Equipment 合身)
        {
            this.equipment = equipment;
        }

        ////// 袭击
        ///publicoverridevoid Attack()
        {
            //假定有合身,用袭击合身if (合身 != null)
            {
                ();
            }
        }
    }

    ////// 匆忙翻找
    ///publicclass RifleEquipment : EquipDecorator
    {
        publicoverridevoid Attack()
        {
            base.Attack();

            ("匆忙翻找射击,啪!");
        }
    }

    ////// 机枪
    ///publicclass MachineGunEquipment : EquipDecorator
    {
        publicoverridevoid Attack()
        {
            base.Attack();

            ("机枪攒射,发出突突声突!");
        }
    }

    ////// 芝麻菜筒
    ///publicclass RocketGunEquipment : EquipDecorator
    {
        publicoverridevoid Attack()
        {
            base.Attack();

            ("芝麻菜炮射击,Shua。!");
        }
    }

   客户端让与

class Program
    {
        staticvoid Main(string[] args)
        {
            // 下定义的征募
            Soldier soldier = new Soldier();

            // 三种合身
            RifleEquipment rifle = new RifleEquipment();
            MachineGunEquipment machineGun = new MachineGunEquipment();
            RocketGunEquipment rocketGun = new RocketGunEquipment();

            // 将三种合身整个柄征募            (兵士)
            (匆忙翻找)
            (机枪)

            // 袭击,以及拳头和脚,你也可以用匆忙翻找。,机枪,芝麻菜炮.终极表现的是().            ();

            ();
        }
    }

   运转产生

  用拳头和拳头袭击!
匆忙翻找射击,啪!
机枪攒射,发出突突声突!
芝麻菜炮射击,Shua。!

无法在这个位置找到: right.htm
Copyright © 2016-2017 皇冠娱乐 - 皇冠投注网址 - 皇冠娱乐网 版权所有