设计模式实践-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校验
报文头|报文内容|奇偶校验
posted @ 2016-07-12 22:27  4Thing  阅读(148)  评论(0编辑  收藏  举报