赞
踩
构造者模式:使用多个简单的对象逐渐构建成一个复杂的对象
构造者模式属于创建型模式,它提供了一种创建对象的最佳方式
Builder 模式基于:一个对象可能有不同的组成部分,这些组成部分的不同创建对象有不同的表示,但是各个部分之间装配的方式是一致的(比如单车的装配,车轮、链条、车身、脚踏板)。
基于此,构建的过程是一样的,所以可以统一使用一个抽象接口,不同的组成部分可以由派生类来实现
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
适用于以下情况:
解析:
Builder 模式的实现,基于以下面向对象设计原则:
using System; namespace ConsoleApp2 { class Class7 { public static void Main(string[] args) { PersonDirector dir = new PersonDirector(new ThinPersonBuilder()); Person person = dir.BuildPerson(); Console.WriteLine(person.Head); Console.WriteLine(person.Body); Console.WriteLine(person.Arm); Console.WriteLine(person.Leg); Console.ReadLine(); } } // 要建造的产品 public class Person { public string Head { get; set; } public string Body { get; set; } public string Arm { get; set; } public string Leg { get; set; } } // 定义创建者接口,实现者必须实现该接口中定义的所有抽象方法,防止实现者疏忽而遗漏某个部件的创建 public abstract class Builder { protected Person Person { get; set; } public Builder() { Person = new Person(); } // 建造头 public abstract void BuildHead(); // 建造身体 public abstract void BuildBody(); // 建造胳膊 public abstract void BuildArm(); // 建造腿 public abstract void BuildLeg(); // 返回生成好的对象,这是一个具体方法,每个子类都可以使用它来返回一个已经创建成功的对象 public Person GetPerson() { return Person; } } // 建造者的具体实现,这里是要建造出一个瘦子 public class ThinPersonBuilder : Builder { public override void BuildHead() { Person.Head = "瘦子的脑袋"; } public override void BuildBody() { Person.Body = "瘦子的身体"; } public override void BuildArm() { Person.Arm = "瘦子的胳膊"; } public override void BuildLeg() { Person.Leg = "瘦子的腿"; } } // 建造者的具体实现,这里是要建造出一个胖子 public class FatPersonBuilder : Builder { public override void BuildHead() { Person.Head = "胖子的脑袋"; } public override void BuildBody() { Person.Body = "胖子的身体"; } public override void BuildArm() { Person.Head = "胖子的胳膊"; } public override void BuildLeg() { Person.Head = "胖子的腿"; } } // 建造者模式中的指挥者 public class PersonDirector { Builder builder; public PersonDirector(Builder personBuilder) { builder = personBuilder; } // 指挥创建一个人的过程,并返回创建成功的产品 public Person BuildPerson() { builder.BuildHead(); builder.BuildBody(); builder.BuildArm(); builder.BuildLeg(); return builder.GetPerson(); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。