模式实例之——装饰实例

简介: 场景:游戏修改器   描述:角色的级别太低,技能也弱,但关卡难度太大。往往一上来来不及回血,或游戏设定回血太慢。这里用游戏修改器。   (一)角色 public abstract class Role     {         public string Name { get; se...

场景:游戏修改器

 

描述:角色的级别太低,技能也弱,但关卡难度太大。往往一上来来不及回血,或游戏设定回血太慢。这里用游戏修改器。

 

(一)角色

public abstract class Role

    {

        public string Name { get; set; }

        public int MP { get; set; }

        public int HP { get; set; }

 

        public abstract void RestoreMP();

        public abstract void RestoreHP();

}

 

系统默认的回蓝系统RestoreMP,回血系统RestoreHP

(二)法师角色

public class Mage:Role

    {

        public override void RestoreMP()

        {

            Console.WriteLine("每秒回复10MP");

        }

 

        public override void RestoreHP()

        {

            Console.WriteLine("每秒回复20MP");

        }

    }

正常情况下,每秒回复蓝10点,血20点。

(三)装饰

public abstract class Decorator : Role

    {

        Role _role;

        public Decorator() { }

        public Decorator(Role role) { _role = role; }

 

        public override void RestoreMP()

        {

            _role.RestoreMP();

        }

 

        public override void RestoreHP()

        {

            _role.RestoreHP();

        }

    }

(四)Mp修改

/// <summary>

    /// mp恢复修改

    /// </summary>

    public class PlugInForMP : Decorator

    {

        public PlugInForMP()

        { }

 

        public PlugInForMP(Role role):base(role)

        {

        

        }

        public override void RestoreMP()

        {

            Console.WriteLine("修改游戏:每秒回复100MP");

            //base.RestoreMP();

        }

    }

(五)Hp恢复

/// <summary>

    /// hp恢复修改

    /// </summary>

    public class PlugInForHP : Decorator

    {

        public PlugInForHP(Role role)

            : base(role)

        {

        

        }

 

        public override void RestoreHP()

        {

            Console.WriteLine("修改游戏:每秒回复500HP");

            //base.RestoreHP();

        }

    }

(六)测试

public void TestDecorator()

        {

            //法师角色

            Role role = new Mage();

 

            //正常情况下

            role.RestoreHP();

            role.RestoreMP();

 

            //角色启用回蓝修改

            Decorator mp = new PlugInForMP(role);

            mp.RestoreMP();

 

            //角色启用回血修改

            Decorator hp = new PlugInForHP(mp);

            hp.RestoreHP();

        }

 

结果:

每秒回复20MP
每秒回复10MP
启用游戏修改之后……
修改游戏:每秒回复100MP
修改游戏:每秒回复500HP


如何使对象功能的扩展能够根据需要来动态地实现?同时避免扩展功能的增多带来的子类膨胀问题?从而使得任何功能扩展变化所导致的影响将为最低?
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。《设计模式》GOF

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
10月前
|
编译器 C++
46 C++ - 非自动继承的函数
46 C++ - 非自动继承的函数
30 0
|
数据库
模式方法模式实例数据库访问
模式方法模式实例数据库访问
62 0
模式方法模式实例数据库访问
|
应用服务中间件 Python
|
缓存 安全 Java
单例模式:控制实例创建数目
单例模式的本质是在于控制实例创建数目
887 0
单例模式:控制实例创建数目
类实例:烤地瓜
# 地瓜肯定不止一个,类,创建地瓜,烤的程序都一样 # 类:初始化 和 如何烤 # 初始化:状态L::生的 烤过的时间为0 加调料:没有 -- 将来芥末,番茄酱 [] # 烤动作:0-3:生的;3-5半生不熟;5-8熟了;大于了8烤糊了 class SweetPotao(object): def __init__(self): # 状态 self.
781 0
|
Python
空对象模式
定义 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。
649 0
工厂方法(FactoryMethod)模式
工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了
1309 0
|
API
51_52创建动态类的实例对象及调用其方法
package com.itcast.day3; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.
659 0