现在的位置: 首页 > 综合 > 正文

设计模式之建造者模式

2012年05月06日 ⁄ 综合 ⁄ 共 1873字 ⁄ 字号 评论关闭

建造者模式:

将一个复杂对象的构建于它的表示分离,似的同样的构建过程可以创建不同的表示

 

什么时候使用建造者模式?

如果你需要将一个复杂对象的构建与它的表示分离,似的同样的构建过程可以创建不同的表示的意图时,我们就需要应用建造者模式。

 

使用建造者模式带来的好处:

以此来将一个产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。这时候用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。

 

怎样用建造者模式?

  1. 定义一个抽象的建造者类
  1. 建造具体建造者类,让具体的建造者类去继承抽象类,那就必须去重写抽象方法(如果不这样的话编译器就不会让其通过)
  2. 建造指挥者类,用它来控制建造过程,也用它来隔离用户与建造过程的关联

 

建造者模式结构图:



建造者模式实现代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者设计模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Director director = new Director();
            Builder b1 = new ConcreteBuilder1();
            Builder b2 = new ConcreteBuilder2();

            //指挥者用ConcretebUilder的方法来建造产品
            director.Construct(b1);
            Product p1 = b1.GetResult();
            p1.Show();

            //指挥者用ConstreteBuilder2的方法建造产品
            director.Construct(b2);
            Product p2 = b2.GetResult();
            p2.Show();
            Console.Read();
        }
    }

    //产品类
    class Product
    {
        //使加进来的部件有序的进行,一般情况下按照加进去的元素时间来排序,
        //先加的序号就更小,从下标为 0 开始,当你删除了其中一个元素的时候,会自动在排序一次.
        IList<string> parts = new List<string>();
        //添加产品部件
        public void Add(string part)
        {
            parts.Add(part);
        }
        //列举所以的产品部件
        public void Show()
        {
            Console.WriteLine("\n 产品 创建----");
            foreach (string part in parts)
            {
                Console.WriteLine(part);
            }
        }

    }

    //抽象建造者类,确定产品由PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult
    abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();
 
    }

    //具体创建者类
    class ConcreteBuilder1 : Builder
    {
        private Product product = new Product();

        //建造具体的两个部件
        public override void BuildPartA()
        {
            product.Add("部件A");
        }
        public override void BuildPartB()
        {
            product.Add("部件B");
        }
        public override Product GetResult()
        {
            return product;
        }
    }

    class ConcreteBuilder2 : Builder
    {
        private Product product = new Product();

        public override void BuildPartA()
        {
            product.Add("部件X");
        }
        public override void BuildPartB()
        {
            product.Add("部件Y");
        }
        public override Product GetResult()
        {
            return product;
        }
    }

    //指挥者类
    class Director
    {
        public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
 

        }
    }


}


建造者模式运行结果:




所以说建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式,在创建时有了建造模式就不会出现丢三落四的现在了。

 

抱歉!评论已关闭.