设计模式学习笔记——桥接模式(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
原文地址:https://www.cnblogs.com/chuifeng/p/1916614.html