zoukankan      html  css  js  c++  java
  • DOTA版设计模式——桥接

    桥接模式比较简单,主要是运用了组合。
    UML图:

    本文中我虚构了一些场景,大概在Dota中不常发生吧。
    Dota中有5个队友,假如,我说的是假如,你的队友西瓜吃多了想要去嘘嘘,但是现在是关键,他是团控,又不能为了胜利牺牲一条内裤加裤子吧。那我们只能共享单位了,现在你可以控制自己也可以控制去嘘嘘的队友的英雄。点击哪个英雄就控制哪个,在这里就可以用到桥接了。
    上边说到桥接是组合,首先英雄是不能缺少的,除非已经被对方送回泉水,还没有重生,呵呵.......英雄来啦:
        public interface IHero
        {
            
    void Action();
        }

        
    /// <summary>
        
    /// 灵魂守卫
        
    /// </summary>
        public class Terrorblade : IHero
        {
            
    public Terrorblade()
            {
            }

            
    #region IHero 成员

            
    public void Action()
            {
                LandpyForm.Form.OutputResult(
    "Terrorblade Action");
            }

            
    #endregion
        }

        
    /// <summary>
        
    /// 德鲁伊
        
    /// </summary>
        public class Syllabear : IHero
        {
            
    public Syllabear()
            {
            }

            
    #region IHero 成员

            
    public void Action()
            {
                LandpyForm.Form.OutputResult(
    "Syllabear Action");
            }

            
    #endregion
        }

    还差什么那,当然是我们玩家啦,没有玩家的游戏还叫游戏吗?
    public class Gamer
        {
            
    private IHero _hero;
            
    public IHero Hero
            {
                
    set { _hero = value; }
            }

            
    public void Action()
            {
                _hero.Action();
            }
        }

    Gamer类中包含了IHero接口,依赖倒置嘛,不管有什么新英雄,Gamer的代码不用改动了,解耦绝对的解耦,HeadFirst所说"多用组合少用继承"啦。
    测试代码如下:
                DotaPatternLibrary.Bridge.Gamer gamer = new DotaPatternLibrary.Bridge.Gamer();
                DotaPatternLibrary.Bridge.IHero hero = new DotaPatternLibrary.Bridge.Syllabear();
                gamer.Hero = hero;
                gamer.Action();
                hero = new DotaPatternLibrary.Bridge.Terrorblade();
                gamer.Hero = hero;
                gamer.Action();
    看吧,可以控制的英雄可以随时切换了吧,让队友快去嘘嘘吧。
    完整代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using DotaCommon;

    namespace DotaPatternLibrary.Bridge
    {

        
    public interface IHero
        {
            
    void Action();
        }

        
    /// <summary>
        
    /// 灵魂守卫
        
    /// </summary>
        public class Terrorblade : IHero
        {
            
    public Terrorblade()
            {
            }

            
    #region IHero 成员

            
    public void Action()
            {
                LandpyForm.Form.OutputResult(
    "Terrorblade Action");
            }

            
    #endregion
        }

        
    /// <summary>
        
    /// 德鲁伊
        
    /// </summary>
        public class Syllabear : IHero
        {
            
    public Syllabear()
            {
            }

            
    #region IHero 成员

            
    public void Action()
            {
                LandpyForm.Form.OutputResult(
    "Syllabear Action");
            }

            
    #endregion
        }

        
    public class Gamer
        {
            
    private IHero _hero;
            
    public IHero Hero
            {
                
    set { _hero = value; }
            }

            
    public void Action()
            {
                _hero.Action();
            }
        }
    }
    敬告

    作者:pangxiaoliang
    出处:http://www.cnblogs.com/pangxiaoliang
    本文版权归pangxiaoliang和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
  • 相关阅读:
    012_DRC检查与处理
    深度系统20.3中亿图图示任务栏名称显示乱码
    deepin20.3+nvidia460.27+cuda11.2+cudnn8.1.1+anconda3.2021.11+paddle2.1.2
    C++中使用DOM写XML文档
    理解lvalue和rvalue
    C++/CLI与C#常用语法对比
    VC++ MSXML创建XML文件以及对XML文档解析
    Stack overflow 编译能通过,运行时出现Stack overflow
    于typedef的用法总结
    VC2008操作Excel2007总结
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1531137.html
Copyright © 2011-2022 走看看