不得不懂的C#设计模式学习(一)

       每天有两个小时要在地铁上度过,打发枯燥的坐车时间唯有看书。最近在看经典大作大话设计模式,其中的编程思想带给我很大的震撼。

每天学习一个设计模式(建造者模式)

   建造者模式概述:

      建造则(Builder Pattern)也叫做生成器模式,提供一种“封装机制”来隔离出"复杂对象的各个部分"的变化,从而保持"稳健构建算法"不随着需求改变而改变。

      (将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.)

  在建造者模式中,有如下四个角色:

     Product产品类:

通常是实现了模板方法模式,也就是有模板方法和基本方法。

     Builder抽象建造者:

规范产品的组建,一般是由子类实现。

     ConcreteBuilder具体建造者

实现抽象类定义的所有方法,并返回一个组件好的对象。

     Director导演

负责安排已有模块的顺序,然后告诉Builder开始创建。

代码清单:   

public class Product

    {

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

        public void Add(string str)

        {

            parts.Add(str);

        }



        public void Show()

        {

            Console.WriteLine("\n产品创建-----");

            foreach (string item in parts)

            {

                Console.WriteLine(item);

            }

        }

    }



    public abstract class Builder

    {

        public abstract void BuilderPartA();

        public abstract void BuilderPartB();

        public abstract Product GetResult();

    }



    class ConcreteBuilder1 : Builder

    {

        private Product product = new Product();



        public override void BuilderPartA()

        {

            product.Add("部件A");

        }



        public override void BuilderPartB()

        {

            product.Add("部件B");

        }



        public override Product GetResult()

        {

            return product;

        }

    }





    public class ConcerteBulider2 : Builder

    {

        private Product product = new Product();



        public override void BuilderPartA()

        {

            product.Add("部件X");

        }



        public override void BuilderPartB()

        {

            product.Add("部件Y");

        }



        public override Product GetResult()

        {

            return product;

        }

    }



    public class Director

    {

        public void Construct(Builder builder)

        {

            builder.BuilderPartA();

            builder.BuilderPartB();

        }

    }
 static void Main(string[] args)

        {

            Director director = new Director();

            Builder b1 = new ConcreteBuilder1();

            Builder b2 = new ConcerteBulider2();

            director.Construct(b1);

            Product p1 = b1.GetResult();

            p1.Show();

            director.Construct(b2);

            Product p2 = b2.GetResult();

            p2.Show();

        }

 总结:建造者模式的实质是解耦组装过程和创建具体部件,使得我们不关心每个部件是如何组装的。

          建造者模式的奥妙在于Builder将构建次序交给Director类按照次序构建所需的组件。

相关模式

          抽象工厂:重点是工厂模式(简单或者复杂工厂),而建造者模式重点是由简单模式构建复杂对象。

          复合模式:经常被用来构建复杂模式。

 

你可能感兴趣的:(设计模式)