• C#设计模式之四建造者模式(Builder Pattern)【创建型】


    意图:

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

    public class Car{

    private IList<string> parts = new List<string>();

    public void Add(string part){

    parts.Add(part);

     public void Show(){

    foreach(var part in parts){

    Console.WriteLine("组装"+ part); 

    }

    public abstract class Builder{

    public abstract void BuildCarDoor();

    public abstract void BuildCarWheel(); 

    public abstract Car GetCar(); 

    }

    public class BMWBuilder:Builder{

    var car = new Car(); 

    public override void BuilderCarDoor(){

     car.Add("add a Door");

    public override void BuilderCarWheel(){

    car.Add("add a Wheel"); 

    public override Car GetCar(){

    return car; 

    public class BYDBuilder:Builder{

    var car = new Car();

    public override void BuilderCarDoor(){

    car.Add("add a Door"); 

    public override void BuilderCarWheel(){

    car.Add("add a Wheel"); 

    public override Car GetCar(){

    return car; 

    public class Director{

    public void Construct(Builder builder){

    builder.BuilderCarDoor();

    builder.BuilderCarWheel(); 

    public class Client(){

    static void Main(){

    var director = new Director();

    var bmwBuilder = new BMWBuilder();

    var bydBuilder = new BYDBuilder();

     

    director.Construct(bmwBuilder);

    var bmwCar = bmwBuilder.GetCar();

    bmwCar.Show();

     

    director.Construct(bydBuilder);

    var bydCar = bydBuilder.GetCar();

    bydCar.Show(); 

    优点:客户端不必知道产品内部组成的细节。

    具体的建造者类之间是相互独立的,容易扩展。 

    缺点:产生了多余的Build对象和Dirextor类。

  • 相关阅读:
    sql参数化查询语句
    委托窗体之间的传值
    js交换变量写法
    win8环境下安装sql2008r2
    无法绑定由多个部分组成的标识符“System.Data.DataRowView” 遇到问题转帖
    利用stringBuilder操作html文件
    阿里云 发送手机短信
    在定时器中service注入不进去的解决方案
    mysql 排序后在查询
    Hibernate使用Criteria实现分页
  • 原文地址:https://www.cnblogs.com/ljdong7/p/12553120.html
Copyright © 2020-2023  润新知