建造者模式

it2026-09-22  12

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(过程是稳定的)。

从建造者模式的定义来看,肯定是一头雾水,说的都是什么跟什么呀!举个小例来理解下:当我们来实现一个画画的功能,要求画瘦的人和胖的人。画的过程是稳定的,即:头、胳膊、身体、腿都是必须的。而画的具体实现是不一样的,例如:头大、肚子大、腿长等。这时再去理解建造者模式的定义就简单多了。

 

UML图:

 

Builder抽象类中定义各个部分的方法的抽象方法(例:定义了画胳膊、画头、画腿等方法)。ConcreteBuilder类是各种不一样具体表示,它具体实现了Builder中的方法,并且返回一个结果。(例:实现了具体画怎样的头、胳膊、腿等,并返回构造的这个人)product类是具体产品,即:要建造的产品。例:头、胳膊、腿等都是要建造人

 

代码:

 

//抽象建造者类 public abstract class Builder { public abstract void Head(); public abstract void Body(); public abstract void Leg(); } 抽象建造者类:Builder

 

//具体建造者类 class ConcreteBuilderA:Builder { private Person person = new Person(); public override void Head() { //do something person.Head = "A式头"; } public override void Body() { //do something person.Body = "A式身体"; } public override void Leg() { //do something person.Leg = "A式腿"; } public Person GetResult() { return person; } } 具体建造者类:ConcreteBuilderA //具体建造者类 class ConcreteBuilderB:Builder { private Person person = new Person(); public override void Head() { //do something person.Head = "B式头"; } public override void Body() { //do something person.Body = "B式身体"; } public override void Leg() { //do something person.Leg = "B式腿"; } public Person GetResult() { return person; } 具体建造者类:ConcreteBuilderB //产品类 class Person { public Object Head { set; get; } public Object Body { set; get; } public Object Leg { set; get; } } 产品类:Person //指挥者类 class Director { public void Construct(Builder builder) { builder.Head(); builder.Body(); } } 指挥者类:Director

执行:

static void Main(string[] args) { Director director = new Director(); ConcreteBuilderA a = new ConcreteBuilderA(); director.Construct(a); Object p = a.GetResult(); }

  上述执行代码中,首先创建执行者类,再创建一个具体建造者类,然后由执行者类调用Construct方法去执行建造。而最后通过具体建造者类的GetResult方法获得了建造的结果。

 

转载于:https://www.cnblogs.com/wupeiqi/p/3355216.html

相关资源:数据结构—成绩单生成器
最新回复(0)