【设计模式】之创建型模式

根据模式的特点,《设计模式》将23个模式分为三个类别:创建型模式、结构型模式和行为型模式。

下面我将依次介绍创建型模式的定义:

1、工厂方法模式 (Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

关键代码:

interface IFactory   //雷锋工厂
    {
        LeiFeng CreateLeiFeng();
    }
    class Undergraduatefactory : IFactory   //学雷锋的大学生工厂
    {
        public LeiFeng CreateLeiFeng()
        {
            return new Undergraduate();
        }
    }

 //客户端:
 IFactory factory = new Undergraduatefactory();  //要换成“社区志愿者”修改此处即可
 LeiFeng student = factory.CreateLeiFeng();

2、抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

注:抽象工厂模式是工厂模式的拓展。代码类似

关系:

1)继承关系:抽象工厂和具体工厂、抽象产品和具体产品

2)依赖关系:具体工厂依赖于具体产品

好处:

1)易于交换产品系列。IFactory factory = new AccessFactory(); //只需确定实例化哪一个数据库访问对象给factory

2)让具体的创建实例过程与客户端分离。客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。如:客户端只需知道 IUser 和 IDepartment 接口

解决问题:多个类型产品的创建问题

但过于臃肿,如果要增加一个需求,需增加多个类,修改多个类。

3、建造者 Builder 模式,又叫生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

关系:

继承关系:抽象建造者接口和具体建造者                              如:人和胖子、瘦子

聚合关系:指挥者(使用接口的对象)和抽象建造者接口     如:指挥者和人

依赖关系:具体建造者和具体产品

好处:建造代码与表示代码分离。用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。

关键代码:

    //指挥者,控制建造过程,隔离用户与建造过程的关联
    class PersonDirector                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
    {
        private PersonBuilder pb;
        public PersonDirector(PersonBuilder pb)//用户告诉指挥者,需要什么样的小人
        {
            this.pb = pb;
        }
        public void CreatePerson()
        {
            //根据用户的选择建造小人
            pb.Buildhead();
            pb.BuildBody();
            pb.BuildArmLeft();
            pb.BuildArmRight();
            pb.BuildLegLeft();
            pb.BuildLegRight();
        }

4、原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

关系:

继承关系:原型类(接口)和 具体原型类

解决问题:数据结构的复制问题

好处:隐藏了对象创建的细节,又大大提高了性能。

关键代码:

class Resume:ICloneable 
 {

    public Object Clone()
    {
            return (Object)this.MemberwiseClone();//创建当前对象的浅表副本
    }

 }


//客户端:
{
    Resume a = new Resume("不弃");
    a.SetPersonalInfo("女", "20");
    a.SetWorkExperience("1998-2000", "xx公司");

	//调用Clone 方法,实现新简历的生成,并修改新简历的细节
    Resume b = (Resume)a.Clone()
    b.SetWorkExperience("1998-2005", "YY公司");

注:建造者模式和原型模式都隐藏了对象创建的过程。

5、单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

关键:将构造方法改为私有。再写一个public方法,目的返回一个类实例,在该方法中判断是否有实例化过。

好处:客户端不需要考虑是否需要实例化问题。

以上是小编的学习总结,欢迎指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值