• 设计模式学习笔记——桥接模式(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
  • 相关阅读:
    内置函数,闭包。装饰器初识
    生成器
    百度ai 接口调用
    迭代器
    HashMap与ConcurrentHashMap的测试报告
    ConcurrentHashMap原理分析
    centos 5.3 安装(samba 3.4.4)
    什么是shell? bash和shell有什么关系?
    Linux中使用export命令设置环境变量
    profile bashrc bash_profile之间的区别和联系
  • 原文地址:https://www.cnblogs.com/chuifeng/p/1916614.html
Copyright © 2020-2023  润新知