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和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
  • 相关阅读:
    Spring Security——核心类简介——获得登录用户的相关信息
    ssm配置文件
    spring boot项目下的application.properties中的logging.level设置日志级别
    spring boot项目下application.properties中使用logging.path和logging.file时的细节
    generatorConfig.xml(mybatis generator默认配置文件名)详细
    maven web项目下mybatis generator的使用
    各种xml配置文件(所含内部标签及顺序)的提示功能是真的人性化
    Git介绍、安装、命令和实战
    mac下ip地址重定向
    eclipse中Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1531137.html
Copyright © 2011-2022 走看看