模式实例之——装饰实例

简介: 场景:游戏修改器   描述:角色的级别太低,技能也弱,但关卡难度太大。往往一上来来不及回血,或游戏设定回血太慢。这里用游戏修改器。   (一)角色 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/

转载请注明:博客园

目录
相关文章
|
数据采集 编解码 Ubuntu
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
380 0
|
编译器 程序员 C++
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(二)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
632 0
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(二)
|
5月前
|
机器学习/深度学习 人工智能 开发者
阿里云 AI 搜索开放平台新发布:增加 QwQ 模型
阿里云 AI 搜索开放平台 新增加 QwQ 模型,将为企业和开发者带来更强大的搜索解决方案。
316 11
|
10月前
|
人工智能 运维 监控
数字孪生与能源管理:优化电网运营
数字孪生技术通过集成物联网、大数据、AI等先进科技,为实体对象创建虚拟模型,实现实时监控、故障预测与资源优化。在能源管理中,特别是电网运营方面,数字孪生能显著提升系统的稳定性、安全性和效率,推动智能电网建设,优化资源配置,加速应急响应,成为未来能源管理的关键技术。
|
11月前
|
运维 数据处理 Apache
数据实时计算产品对比测评报告:阿里云实时计算Flink版
数据实时计算产品对比测评报告:阿里云实时计算Flink版
|
Java 程序员 Spring
Spring中bean类的生命周期|面试必问如何回答
Spring中bean类的生命周期|面试必问如何回答
|
存储 SQL 数据库
【教程】宝塔default.db占用空间几十g解决方法|宝塔占用磁盘空间特别大解决方法|宝塔磁盘被占满怎么清理
在宝塔面板7.9.0中,用户发现数据盘持续占满,通过`folder size`工具发现`BtSoft\panel\data`下的`default.db`和`system.db`文件占用大量空间,尤其是`default.db`。由于这是SQLite数据库文件,用户使用SQLite Developer打开并发现`boce_list`表包含大量访问记录,可能是宝塔面板未定期清理所致。用户直接清空表后,使用`VACUUM`命令整理数据库以回收空间,成功将`default.db`从18G减至3M,解决了磁盘占用问题。
|
存储 小程序 物联网
|
SQL Java API
Flink超时问题之Flink sql cdc锁超时如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。