创建型设计模式——建造者模式

将一个对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示。

适用于

①创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

②当构造过程必须允许被构造的对象有不同的表示时。

类图如下

 

 1     internal class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //创建过程相同,产生的对象的表示不同
 6             //创建豪车
 7             CarBuilder builder = new LuxuryCarBuilder();
 8             Director director = new Director(builder);
 9             director.ConstructCar();
10             Console.WriteLine(builder.GetCar());
11             //创建普通车
12             builder = new CommonCar();
13             director = new Director(builder);
14             director.ConstructCar();
15             Console.WriteLine(builder.GetCar());
16 
17         }
18     }
 1     /// <summary>
 2     /// 车辆类
 3     /// </summary>
 4     internal class Car
 5     {
 6         public string Engine { get; set; }
 7         public int Count { get; set; }
 8 
 9         public override string ToString()
10         {
11             return "汽车发动机型号" + Engine + ",汽车容量" + Count;
12         }
13     }
View Code
 1     /// <summary>
 2     /// 建造器抽象类(可以是接口),定义公共的建造方法,由具体的建造器类去实现
 3     /// </summary>
 4     /// 建造汽车类
 5     internal abstract class CarBuilder
 6     {
 7         public abstract void SetEngine();
 8         public abstract void SetWheels();
 9 
10         public abstract Car GetCar();
11     }
View Code
 1     /// <summary>
 2     /// 具体建造器(豪车)
 3     /// </summary>
 4     internal class LuxuryCarBuilder : CarBuilder
 5     {
 6         private Car car = new Car();
 7         public LuxuryCarBuilder()
 8         {
 9 
10         }
11         public override Car GetCar()
12         {
13             return car;
14         }
15 
16         public override void SetEngine()
17         {
18             car.Engine = "V8";
19         }
20 
21         public override void SetWheels()
22         {
23             car.Count = 4;
24         }
25     }
View Code
 1     internal class CommonCar : CarBuilder
 2     {
 3         private Car car = new Car();
 4         public override Car GetCar()
 5         {
 6             return car;
 7         }
 8 
 9         public override void SetEngine()
10         {
11             car.Engine = "V2";
12         }
13 
14         public override void SetWheels()
15         {
16             car.Count = 1;
17         }
18     }
View Code
 1     /// <summary>
 2     /// 指挥者类,指挥建造过程,先执行哪一步
 3     /// </summary>
 4     internal class Director
 5     {
 6         private CarBuilder carBuilder;
 7 
 8         public Director(CarBuilder carBuilder)
 9         {
10             this.carBuilder = carBuilder;
11         }
12 
13         public void ConstructCar()
14         {
15             carBuilder.SetEngine();
16             carBuilder.SetWheels();
17         }
18     }
View Code

 

posted @ 2025-04-12 16:55  是铭不是明  阅读(11)  评论(0)    收藏  举报