zoukankan      html  css  js  c++  java
  • 设计模式学习笔记——桥接模式(Bridge Patten)

    学习TerryLee的设计模式颇有感触,留下以下笔记以作日后参考。

    代码
    //--------------------------------------------------------
    //我们常使用继承来实现类功能的扩展。
    //但有时候随着需求的变化,类的扩展就会变得非常的多。
    //但这不是我们所希望见到的,
    //那么我们如何应对需求的变化而引起类的大量增加?
    //You can use Bridge Patten.
    //--------------------------------------------------------

    #region 以前写的消息可以正常使用

    /// <summary>
    /// 消息接口
    /// </summary>
    abstract class AbstractMessage
    {
    void Show();
    }

    /// <summary>
    /// 正常消息
    /// </summary>
    public class NormalMessage : AbstractMessage
    {
    public override void Show()
    {
    throw new NotImplementedException();
    }
    }

    public class EorryMessage : AbstractMessage
    {
    public override void Show()
    {
    throw new NotImplementedException();
    }
    }

    public class WaringMessage : AbstractMessage
    {
    public override void Show()
    {
    throw new NotImplementedException();
    }
    }

    #endregion

    #region 需求变化需要增加服务器端消息和客户端消息两种类型

    #region 使用继承实现做法

    public class ServerNormalMessage : NormalMessage
    {
    public override void Show()
    {
    base.Show();
    }
    }

    public class ServerEorryMessage : EorryMessage
    {
    public override void Show()
    {
    base.Show();
    }
    }

    public class ServerWaringMessage : WaringMessage
    {
    public override void Show()
    {
    base.Show();
    }
    }

    public class ClientNormalMessage : NormalMessage
    {
    public override void Show()
    {
    base.Show();
    }
    }

    public class ClientEorryMessage : EorryMessage
    {
    public override void Show()
    {
    base.Show();
    }
    }

    public class ClientWaringMessage : WaringMessage
    {
    public override void Show()
    {
    base.Show();
    }
    }

    #endregion

    //--------------------------------------------------------
    //使用继承实现固然可以,但一下增加了6个类
    //如果我们再加上数据库上Message呢?
    //--------------------------------------------------------

    #region 使用桥接模式

    #region 增加的类

    public interface IMessageType
    {
    void Execute();
    }

    public class ServerMessageType : IMessageType
    {

    #region IMessageType Members

    public void Execute()
    {
    throw new NotImplementedException();
    }

    #endregion
    }

    public class ClientMessageType : IMessageType
    {
    #region IMessageType Members

    public void Execute()
    {
    throw new NotImplementedException();
    }

    #endregion
    }

    #endregion

    #region 修改IMessage

    abstract class AbstractMessage
    {
    public IMessageType Type { get; set; }

    public virtual void Show()
    {
    Type.Execute();
    }
    }

    #endregion

    #region 客户端调用

    public class App
    {
    public static void Main()
    {
    #region 实现服务器端Normal消息

    NormalMessage serverNormalMessage
    = new NormalMessage();
    serverNormalMessage.Type
    = new ServerMessageType();
    serverNormalMessage.Show();

    #endregion
    }
    }

    #endregion

    #endregion

    #endregion
  • 相关阅读:
    MVC3 的路由Test
    表连接
    Moq MVC 初窥门径(一)
    FATAL ERROR: JS Allocation failed process out of memory
    版本号的意义
    JavaScript 类型的隐式转换
    翻译foreach语句
    一次http请求的全过程(附mmap文件下载)
    AOP学习笔记
    Kindle3之中文乱码问题
  • 原文地址:https://www.cnblogs.com/chuifeng/p/1916614.html
Copyright © 2011-2022 走看看