[创建型设计模式:Builder]代码实现

来源:互联网 发布:装饰图片的软件 编辑:程序博客网 时间:2024/04/30 19:40



using System;using System.Collections.Generic;using System.Linq;using System.Text; ////优点:同样的构建过程,不同的表现形式,换房子的窗户,换房子的地板 ///同属于一个大对象的子对象在变化的时候使用这个模式 ////缺点:难以应对分步骤的去构造房子////优点:关闭修改,开放扩展namespace ConsoleApplication2{    class build    {    }    public abstract class Builder    {        public abstract void BuildDoor();        public abstract void BuildWall();        public abstract void BuildWindows();        public abstract void BuildFloor();        public abstract void BuildHourseCeiling();        public abstract Hourse GetHourse();    }    public abstract class Door { }    public abstract class Wall { }    public abstract class Windows { }    public abstract class Floor { }    public abstract class HourseCeiling { }    public abstract class Hourse { }    ////具体实现的类    public class RomainHourse : Hourse    {    }    /// <summary>    /// 具体实现的类    /// </summary>    public class RomainBuilder : Builder    {        public override void BuildDoor() { }        public override void BuildWall() { }        public override void BuildWindows() { }        public override void BuildFloor() { }        public override void BuildDoor() { }        public override void BuildHourseCeiling() { }        public override Hourse GetHourse()        {            return new RomainHourse();        }    }    public class RomainDoor : Door { }    public class RomainWall : Wall { }    public class RomainWindows : Windows { }    public class RomainFloor : Floor { }    public class RomainHourseCeiling : HourseCeiling { }    ///类文件 构造房子的类    public class GameManager    {        public static Hourse CreateHourse(Builder builder)        {            builder.BuildDoor();            builder.BuildDoor();            builder.BuildFloor();            builder.BuildHourseCeiling();            builder.BuildWall();            builder.BuildWindows();            return builder.GetHourse();        }    }    ///类文件    /// <summary>    /// 客户端程序通过设置XML来调用客户端    /// </summary>    public class APP    {        public static void Main()        {            ///可以在客户端使用XML文件进行配置            string assemblyName = configurationSettings["BuilderAssembly"];            string builderName = configurationSettings["BuilderClass"];            Assembly assembly = Assembly.Load(assemblyName);            Type t = assembly.GetType(builderName);            Builder builder = Activator.CreateInstance(t);            Hourse a = GameManager.CreateHourse(builder);            Hourse a1 = GameManager.CreateHourse(new RomainBuilder);        }    }}

总结:代码看懂了,但是好像从来没遇到过!!汗

原创粉丝点击