设计模式实践-Builder
场景
根据不同的指挥者构建不同的命令内容
实现代码
命令类:
namespace DesignPatterns.Builder
{
/// <summary>
/// 命令类型
/// </summary>
public class Command
{
/// <summary>
/// Gets or sets 命令内容
/// </summary>
public string Content { get; set; }
}
}
命令建造者接口:
namespace DesignPatterns.Builder
{
/// <summary>
/// 命令构建者接口
/// </summary>
internal interface ICommandBuilder
{
/// <summary>
/// 构建报头
/// </summary>
void BuildHeader();
/// <summary>
/// 构建报文
/// </summary>
void BuildPackets();
/// <summary>
/// 在尾部添加CRC校验
/// </summary>
void BuildEndByCrc();
/// <summary>
/// 在尾部添加奇偶校验
/// </summary>
void BuildEndByOddEven();
/// <summary>
/// 获取命令
/// </summary>
/// <returns>命令对象</returns>
Command GetCommand();
}
}
命令建造者实现:
namespace DesignPatterns.Builder
{
/// <summary>
/// 命令构造者实现类
/// </summary>
internal class CommandBuilder : ICommandBuilder
{
/// <summary>
/// 命令对象
/// </summary>
private Command _command;
/// <summary>
/// 构建命令头
/// </summary>
public void BuildHeader()
{
this._command = new Command
{
Content = "报文头|"
};
}
/// <summary>
/// 构建命令内容
/// </summary>
public void BuildPackets()
{
this._command.Content += "报文内容|";
}
/// <summary>
/// 构建CRC校验
/// </summary>
public void BuildEndByCrc()
{
this._command.Content += "CRC校验";
}
/// <summary>
/// 构建奇偶校验
/// </summary>
public void BuildEndByOddEven()
{
this._command.Content += "奇偶校验";
}
/// <summary>
/// 获取命令
/// </summary>
/// <returns>命令对象</returns>
public Command GetCommand()
{
return this._command;
}
}
}
指挥者接口:
namespace DesignPatterns.Builder
{
/// <summary>
/// 指挥者接口
/// </summary>
public interface IDirector
{
/// <summary>
/// 指挥建造
/// </summary>
/// <returns>命令对象</returns>
Command Constuct();
}
}
指挥者A实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 传感器类型A
/// </summary>
internal class SensorA : ISensor
{
/// <summary>
/// 显示传感器类型
/// </summary>
public void ShowType()
{
Console.WriteLine("Sensor A");
}
}
}
指挥者B实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPatterns.FactoryBase
{
/// <summary>
/// 传感器类型B
/// </summary>
internal class SensorB : ISensor
{
/// <summary>
/// 显示传感器类型
/// </summary>
public void ShowType()
{
Console.WriteLine("Sensor B");
}
}
}
相关调用
DirectorA directorA = new DirectorA(new CommandBuilder());
DirectorB directorB = new DirectorB(new CommandBuilder());
var commandA = directorA.Constuct();
var commandB = directorB.Constuct();
Console.WriteLine(commandA.Content);
Console.WriteLine(commandB.Content);
Out:
报文头|报文内容|CRC校验
报文头|报文内容|奇偶校验