Core Design Patterns(12) Builder 建造者模式
VS 2008
建造者模式将复杂对象的创建过程和对象的变现分离。
使得一个建造过程可以创建出具有不同变现的产品对象。
1. 模式UML图
![](/images/cnblogs_com/guozhijian/Design Pattern/builder-1.gif)
2. 应用
考虑需要创建统一管理页面div的style的类,这个style通常包含font style、border style等信息,现在使用builder模式在创建这个管理div的style的类的产品。
![](/images/cnblogs_com/guozhijian/Design Pattern/builder-4.gif)
DivStyle.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
![](/Images/OutliningIndicators/None.gif)
namespace DesignPattern.Builder.BLL {
public class DivStyle {
![](/Images/OutliningIndicators/InBlock.gif)
public string FontStyle { get; set; }
public string BorderStyle { get; set; }
![](/Images/OutliningIndicators/InBlock.gif)
public void Display() {
Console.WriteLine("FontStyle is {0}, BorderStyle is {1}", this.FontStyle, this.BorderStyle);
}
}
}
IDivStyleBuilder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
![](/Images/OutliningIndicators/None.gif)
namespace DesignPattern.Builder.BLL {
![](/Images/OutliningIndicators/InBlock.gif)
public interface IDivStyleBuilder {
![](/Images/OutliningIndicators/InBlock.gif)
void BuildeFontStyle();
void BuildeBorderStyle();
DivStyle GetResult();
![](/Images/OutliningIndicators/InBlock.gif)
}
}
CommonDivStyleBuilder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
![](/Images/OutliningIndicators/None.gif)
namespace DesignPattern.Builder.BLL {
![](/Images/OutliningIndicators/InBlock.gif)
public class CommonDivStyleBuilder : IDivStyleBuilder {
![](/Images/OutliningIndicators/InBlock.gif)
private DivStyle divStyle = new DivStyle();
![](/Images/OutliningIndicators/InBlock.gif)
IDivStyleBuilder Members
}
}
SpecialDivStyleBuilder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
![](/Images/OutliningIndicators/None.gif)
namespace DesignPattern.Builder.BLL {
public class SpecialDivStyleBuilder : IDivStyleBuilder {
![](/Images/OutliningIndicators/InBlock.gif)
private DivStyle divStyle = new DivStyle();
![](/Images/OutliningIndicators/InBlock.gif)
IDivStyleBuilder Members
}
}
Director.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
![](/Images/OutliningIndicators/None.gif)
namespace DesignPattern.Builder.BLL {
public class Director {
![](/Images/OutliningIndicators/InBlock.gif)
private IDivStyleBuilder builder;
![](/Images/OutliningIndicators/InBlock.gif)
public Director(IDivStyleBuilder builder) {
this.builder = builder;
}
public void Construct() {
this.builder.BuildeFontStyle();
this.builder.BuildeBorderStyle();
}
}
}
Client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DesignPattern.Builder.BLL;
![](/Images/OutliningIndicators/None.gif)
namespace DesignPattern.Builder {
class Program {
static void Main(string[] args) {
![](/Images/OutliningIndicators/InBlock.gif)
IDivStyleBuilder commonBuilder = new CommonDivStyleBuilder();
new Director(commonBuilder).Construct();
commonBuilder.GetResult().Display();
![](/Images/OutliningIndicators/InBlock.gif)
IDivStyleBuilder specialBuilder = new SpecialDivStyleBuilder();
new Director(specialBuilder).Construct();
specialBuilder.GetResult().Display();
}
}
}
Output
建造者模式将复杂对象的创建过程和对象的变现分离。
使得一个建造过程可以创建出具有不同变现的产品对象。
1. 模式UML图
![](/images/cnblogs_com/guozhijian/Design Pattern/builder-1.gif)
2. 应用
考虑需要创建统一管理页面div的style的类,这个style通常包含font style、border style等信息,现在使用builder模式在创建这个管理div的style的类的产品。
![](/images/cnblogs_com/guozhijian/Design Pattern/builder-4.gif)
DivStyle.cs
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
IDivStyleBuilder.cs
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
CommonDivStyleBuilder.cs
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
SpecialDivStyleBuilder.cs
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
Director.cs
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
Client
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
Output
![](/images/cnblogs_com/guozhijian/Design Pattern/builder-3.gif)