建造者模式 -- 大话设计模式
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示
1.建造者模式应用
一家服装厂,经理老张,员工两名(一个师傅老王,一个徒弟小海),客户跟老张联系,要做两件衣服,老张指派老王和小海各做一件
定义建造者抽象类和具体建造者,他们是具体干活的(对象的构建)
/// <summary> /// 员工抽象类(建造者抽象类) /// </summary> public abstract class Staff { protected string _name; public Staff(string name) { this._name = name; } /// <summary> /// 具体业务 /// </summary> public abstract void DoSomething(); } /// <summary> /// 一般员工(具体建造者) /// </summary> public class GeneralStaff : Staff { public GeneralStaff(string name) : base(name) { } public override void DoSomething() { Console.WriteLine("{0}【一般员工】做的衣服,做工粗糙", this._name); } } /// <summary> /// 资深员工(具体建造者) /// </summary> public class SeniorStaff : Staff { public SeniorStaff(string name) : base(name) { } public override void DoSomething() { Console.WriteLine("{0}【资深员工】做的衣服,做工精细", this._name); } }
定义指挥者,负责与外部对接的(表示的分离)
/// <summary> /// 指挥者 /// </summary> public class Director { protected string _name; public Director(string name) { this._name = name; } /// <summary> /// 指派员工干活 /// </summary> public void Assign(Staff staff) { staff.DoSomething(); } }
开启场景模拟
static void Main(string[] args) { //一家服装厂,经理老张,员工两名(一个师傅老王,一个徒弟小海) Director laozhang = new Director("老张"); SeniorStaff laowang = new SeniorStaff("老王"); GeneralStaff xiaohai = new GeneralStaff("小海"); //客户跟老张联系,要做两件衣服,老张指派老王和小海各做一件 laozhang.Assign(laowang); laozhang.Assign(xiaohai); }