Builder

Definition

Separates the construction of a complex object from its representation so that the same construction process can create different representations.

Class Diagram

Participants

  • Builder.
    • specifies an abstract interface for creating parts of a Product object
  • ConcreteBuilder.
    • constructs and assembles parts of the product by implementing the Builder interface
    • defines and keeps track of the representation it creates
    • provides an interface for retrieving the product
  • Director.
    • constructs an object using the Builder interface
  • Product.
    • represents the complex object under construction. ConcreteBuilder builds the product's internal representation and defines the process by which it's assembled
    • includes classes that define the constituent parts, including interfaces for assembling the parts into the final result

Example:

ContractedBlock.gif ExpandedBlockStart.gif Vehicle
 1    class Vehicle 
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        private string type;
 4        private Dictionary<stringstring> parts = new Dictionary<string,string>();
 5
 6        public Vehicle(string type) 
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 8            this.type = type;
 9        }

10
11        public void AddPart (string key, string value)
12ExpandedSubBlockStart.gifContractedSubBlock.gif        {
13            parts.Add(key, value);
14        }

15
16        public void Show()
17ExpandedSubBlockStart.gifContractedSubBlock.gif        {
18            Console.WriteLine("This is a {0}.", type);
19            foreach (string key in parts.Keys) 
20ExpandedSubBlockStart.gifContractedSubBlock.gif            {
21                Console.WriteLine("The {0} part is {1}.", key, parts[key]);
22            }

23            Console.WriteLine("------------------------------------");
24        }

25    }

 

ContractedBlock.gif ExpandedBlockStart.gif VehicleBuilder
 1    abstract class VehicleBuilder 
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        protected Vehicle vehicle;
 4
 5        public Vehicle Vechicle 
 6ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            get return vehicle; }
 8        }

 9
10        public abstract void BuildEngine();
11        public abstract void BuildFrame();
12        public abstract void BuildWheels();
13        public abstract void BuildDoors();
14    }

 

ContractedBlock.gif ExpandedBlockStart.gif MotorcycleBuilder
 1    class MotorcycleBuilder : VehicleBuilder 
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        public MotorcycleBuilder() 
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 5            vehicle = new Vehicle("motorcycle");
 6        }

 7
 8        public override void BuildDoors()
 9ExpandedSubBlockStart.gifContractedSubBlock.gif        {
10            vehicle.AddPart("doors""0 doors");
11        }

12
13        public override void BuildEngine()
14ExpandedSubBlockStart.gifContractedSubBlock.gif        {
15            vehicle.AddPart("engine""500 cc");
16        }

17
18        public override void BuildFrame()
19ExpandedSubBlockStart.gifContractedSubBlock.gif        {
20            vehicle.AddPart("frame""motorcyle frame");
21        }

22
23        public override void BuildWheels()
24ExpandedSubBlockStart.gifContractedSubBlock.gif        {
25            vehicle.AddPart("wheels""2 wheels");
26        }

27    }

 

ContractedBlock.gif ExpandedBlockStart.gif CarBuilder
 1    class CarBuilder : VehicleBuilder
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        public CarBuilder() 
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 5            vehicle = new Vehicle("car");
 6        }

 7
 8        public override void BuildDoors()
 9ExpandedSubBlockStart.gifContractedSubBlock.gif        {
10            vehicle.AddPart("doors""2 doors");
11        }

12
13        public override void BuildEngine()
14ExpandedSubBlockStart.gifContractedSubBlock.gif        {
15            vehicle.AddPart("engine""2500 cc");
16        }

17
18        public override void BuildFrame()
19ExpandedSubBlockStart.gifContractedSubBlock.gif        {
20            vehicle.AddPart("frame""car frame");
21        }

22
23        public override void BuildWheels()
24ExpandedSubBlockStart.gifContractedSubBlock.gif        {
25            vehicle.AddPart("wheels""4 wheels");
26        }

27    }

 

ContractedBlock.gif ExpandedBlockStart.gif Shop
    class Shop
    {
        
public void Construct(VehicleBuilder builder) 
        {
            builder.BuildDoors();
            builder.BuildEngine();
            builder.BuildFrame();
            builder.BuildWheels();
        }
    }

 

ContractedBlock.gif ExpandedBlockStart.gif Program
 1    class Program
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        static void Main(string[] args)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 5            Shop shop = new Shop();
 6            MotorcycleBuilder motorcycleBuilder = new MotorcycleBuilder();
 7            CarBuilder carBuilder = new CarBuilder();
 8
 9            shop.Construct(motorcycleBuilder);
10            motorcycleBuilder.Vechicle.Show();
11
12            shop.Construct(carBuilder);
13            carBuilder.Vechicle.Show();
14
15            Console.Read();
16        }

17    }

转载于:https://www.cnblogs.com/zhtf2014/archive/2009/02/21/1395424.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值