Core Design Patterns(12) Builder 建造者模式

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 getset; }
        
public string BorderStyle getset; }

        
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();

    }

}


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
    }

}


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
    }

}


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();
        }

    }

}


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();
        }

    }

}


Output

posted on 2008-03-16 15:14  Tristan(GuoZhijian)  阅读(542)  评论(2编辑  收藏  举报