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