风动破

导航

设计模式之Build【创建模式】

 Builder模式定义:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.、

为何使用?

是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件. 因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.

如何使用?

首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示

/// <summary>

    /// 构造者模式
    /// </summary>
    public class BuildMode
    {
        public BuildMode() 
        {
            AbstractBuild build = new NoteBook();
            BuildFactory bf = new BuildFactory();
            bf.BuildComputer(build);
            build.Build.ShowInfo();
        }
    }
    public interface IBuild { void ShowInfo();}
    /// <summary>
    /// 电脑
    /// </summary>
    public class Compute :IBuild
    {
        private string videoCard;
        /// <summary>
        /// 声卡
        /// </summary>
        public string VideoCard
        {
            get { return videoCard; }
            set { videoCard = value; }
        }
        private string mainboard;
        /// <summary>
        /// 主板
        /// </summary>
        public string Mainboard
        {
            get { return mainboard; }
            set { mainboard = value; }
        }
        private string cpu;
        /// <summary>
        /// CPU
        /// </summary>
        public string Cpu
        {
            get { return cpu; }
            set { cpu = value; }
        }
        private string harddisk;
        /// <summary>
        /// 硬盘
        /// </summary>
        public string Harddisk
        {
            get { return harddisk; }
            set { harddisk = value; }
        }
        private string memory;
        /// <summary>
        /// 内存
        /// </summary>
        public string Memory
        {
            get { return memory; }
            set { memory = value; }
        }
        public void ShowInfo() 
        {
            Console.WriteLine("==================SystemInfo==================");
            Console.WriteLine("CPU:" + cpu);
            Console.WriteLine("MainBoard:" + mainboard);
            Console.WriteLine("Memory:" + memory);
            Console.WriteLine("VideoCard:" + videoCard);
            Console.WriteLine("HardDisk:" + harddisk);
        }
    }
    public abstract class AbstractBuild 
    {
        private string name;
        protected string Name
        {
            get { return name; }
            set { name = value; }
        }
        private IBuild build;
        public IBuild Build
        {
            get { return build; }
            set { build = value; }
        }
        public AbstractBuild() 
        {
            build = new Compute();
        }
        public abstract void SetCpu();
        public abstract void SetMemory();
        public abstract void SetHardDisk();
        public abstract void SetMainBoard();
        public abstract void SetVedioCard();
    }
    /// <summary>
    /// 建造工厂
    /// </summary>
    public class BuildFactory
    {
        public void BuildComputer(AbstractBuild build) 
        {
            build.SetCpu();
            build.SetHardDisk();
            build.SetMainBoard();
            build.SetMemory();
            build.SetVedioCard();
        }
    }
    public class NoteBook:AbstractBuild{
        public NoteBook() { Name = "笔记本"; }
        public override void SetCpu()
        {
            ((Compute)Build).Cpu = "CPU";
        }
        public override void SetMemory()
        {
            ((Compute)Build).Memory = "Memory";
        }
        public override void SetHardDisk()
        {
            ((Compute)Build).Harddisk = "Harddisk";
        }
        public override void SetMainBoard()
        {
            ((Compute)Build).Mainboard = "Mainboard";
        }
        public override void SetVedioCard()
        {
            ((Compute)Build).VideoCard = "VedioCard";
        }
    }

posted on 2015-04-30 09:18  风动破  阅读(142)  评论(0)    收藏  举报