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和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
  • 相关阅读:
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化和保存
    爬取全部校园新闻
    爬取校园新闻
    Google布隆过滤器
    谷歌json和对象转换
    postgresql和postgis
    json和实体类互相转换
    Linux安装docker-compose
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1531137.html
Copyright © 2011-2022 走看看