大话总结——创建型

简介: 大话总结——创建型

在大话这本书中一共介绍了24个设计模式,在这20多个设计模式中,我们把它们分为三大类——创建型、结构型、行为型。在本篇博客中我将总结这三大类型之一的创建型模式。


创建型模式包括:单例模式、工厂方法、抽象工厂、建造者模式、原型模式。在前面的博客中已经对简单工厂、工厂方法、抽象工厂进行了简单的总结,所以在下文中主要对其余几种模式总结。


(一)建造者模式


定义:将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。


基本结构:


20141122205334066.jpg

实例:现在我们需要建造(组装)一辆汽车,大致步骤分为:建造发动机、框架、车盖、轮胎等,我们现在只知道客户暂时需要跑车和轿车两种,下面来看一下类图:

20141122211506154.jpg

代码实现:

   class Program
    {
        //首先定义一个建造汽车的类,来把建造过程稳定住,避免遗忘建造步骤
        abstract class CarBuilder
        {
            public abstract void BuildEngine();
            public abstract void BuildFrame();
            public abstract void BuildTire();
            public abstract void BuildBonnet();
        }
        //建造跑车
        class SportscarBuilder : CarBuilder
        {
            public override void BuildBonnet()
            {
                Console.WriteLine("建造轮胎");
            }
            public override void BuildEngine()
            {
                Console.WriteLine("建造发动机");
            }
            public override void BuildFrame()
            {
                Console.WriteLine("建造框架");
            }
            public override void BuildTire()
            {
                Console.WriteLine("建造车盖");
            }
        }
            //如果想让我们客户端不关心建造过程,那么我们需要一个很重要的类——指挥者
            class CarDirector
            {
                private CarBuilder cb;
                public CarDirector(CarBuilder cb)
                {
                    this.cb = cb;                   //用户高速指挥者,我需要什么样的汽车
                }
                public void CreateCar()
                {
                    cb.BuildBonnet();
                    cb.BuildEngine();
                    cb.BuildFrame();
                    cb.BuildTire();
                }
            }
        static void Main(string[] args)
        {
            SportscarBuilder 跑车 = new SportscarBuilder();
            CarDirector 建造指挥 = new CarDirector(跑车);
            建造指挥.CreateCar();
        }

从这个例子中我们就可以看出,如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。很好的体现了创建过程和实现的分离。并且如果我们想增加一个赛车的建造,只需增加一个赛车类去继承CarBuilder类就可以了。


(二)单例模式


定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。


此模式比较简单就不在给出详细的介绍


(三)原型模式


定义:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。


原型图:

20141122215848890.jpg


原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不许知道任何创建细节。

实例代码:

        class Resume : ICloneable
        {
            private string name;
            private string sex;
            private string age;
            private string timeArea;
            private string company;
            public Resume(string name)
            {
                this.name = name;
            }
            //设置个人信息
            public void SetPersonalInfo(string sex, string age)
            {
                this.sex = sex;
                this.age = age;
            }
            //设置工作经历
            public void SetWorkExperience(string timeArea, string company)
            {
                this.timeArea = timeArea;
                this.company = company;
            }
            public void Display()
            {
                Console.WriteLine("{0} {1} {2}", name, sex, age);
                Console.WriteLine("{0} {1}", timeArea, company);//实现接口的方法,用来克隆对象
            }
            public object Clone()
            {
                return (object)this.MemberwiseClone();
            }
        }
            static void Main(string[] args)
            {
                 Resume a = new Resume("大鸟");
                 a.SetPersonalInfo("男","29");
                 a.SetWorkExperience("1998-2000","xx公司");
                 Resume b =(Resume)a.Clone();
                b.SetWorkExperience("1998-2006","YY公司");
                 Resume c=(Resume)a.Clone();
                 c.SetPersonalInfo("男","24");
                 a.Display();
                 b.Display();
                 c.Display();
                 Console.Read();

小结


创建型模式(Creational pattern)为你创建对象,而不必由你直接实例化对象。针对给定的案例,程序可以在确定需要创建哪些对象使获得更大的灵活性。

目录
相关文章
|
6月前
创建型 抽象工厂模式
创建型 抽象工厂模式
36 1
|
设计模式 存储 Java
创建型设计模式03-原型模式
创建型设计模式03-原型模式
36 0
|
设计模式
创建型设计模式02-工厂方法模式
创建型设计模式02-工厂方法模式
43 0
|
设计模式 Java 测试技术
创建型设计模式01-简单工厂模式
创建型设计模式01-简单工厂模式
31 0
|
6月前
|
缓存 数据库 C++
创建型 原型模式
创建型 原型模式
52 1
|
6月前
|
设计模式 安全 数据库
创建型设计模式-单例模式/工厂模式/抽象工厂
创建型设计模式-单例模式/工厂模式/抽象工厂
59 0
|
6月前
创建型 建造者模式
创建型 建造者模式
42 0
|
设计模式 SQL Oracle
创建型设计模式05-抽象工厂模式
创建型设计模式05-抽象工厂模式
35 0
|
设计模式 Java 关系型数据库
创建型设计模式——原型模式
创建型设计模式——原型模式
创建型设计模式——原型模式
|
设计模式 程序员
创建型设计模式——抽象工厂模式
创建型设计模式——抽象工厂模式
创建型设计模式——抽象工厂模式