【学习】设计模式-创建型模式(1)

本文深入探讨了创建型模式的概念及其在软件设计中的作用,详细介绍了类的创建型模式和对象的创建型模式,阐述了通过对象委托、类继承和实例注入等方法分离和抽象实例化过程的重要性。文章还对单件、抽象工厂、建造者、工厂方法和原型模式进行了对比分析,并提供了关键设计模式的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

创建型模式:

用来创建对象的模式,是对类的实例化过程的抽象化,它帮助一个系统独立于如何创建、组合和表示它的那些对象,即为了使体系结构更加清晰,有些软件在设计上要求当创建类的具体实例时,能够根据具体的语境来动态地决定怎样创建对象,创建哪些对象,以及怎样组织和表示这些对象。

 

按照生成目标的不同,创建型模式可以分为类的创建型模式和对象的创建型模式。

类的创建型模式:通过使用继承关系,将类的创建交由具体的子类来完成,这样就向外界隐藏了如何得到具体类的实现细节,以及这些类的实例是如何被创建和组织在一起的。

对象的创建型模式:通过把对象的创建委托给另一个对象来完成,可以根据语境动态地决定生成哪些具体类的实例,同时还可以向外界隐藏这些实例是如何被创建以及如何被组织在一起的细节。

 

所有创建型模式都有两个永恒的主旋律:

第一,它们都将系统使用哪些具体类的信息封装起来。

第二,它们隐藏了这些类的实例时如何被创建和组织的,外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)创建,以及何时(when)创建这些方面,都为设计者提供了尽可能大的灵活性。

 

对实例化过程进行分离和抽象有如下方法

对象委托:将对象的创建委托给专门的工厂对象,这样对于工厂所创建的对象就可以集中管理,并向客户端隐藏实际类型信息,客户端所知道的只是所使用(包含)对象的接口,这样当需要对这些对象进行类型、结构调整时就可以非常方便和统一。

类继承:通过在父类中创建对象的接口,从而当子类在需要的时候就可以通过重新实现该接口来创建其他类型的对象。

实例注入:客户端不需要知道所创建/使用的对象的具体类型,而只需要知道在实际运行的时候会得到这些对象的原型,当需要创建对象时仅克隆所得到的原型即可。

 

设计模式

描述

分离和抽象的方法

注意事项

单件(Singleton)

保证一个类仅有一个实例,自行实例化后提供一个该实例全局的访问点

 

1.构造函数privateprotected,防止外部实例化
2.
双层锁定实例化,防止多线程的多个实例化
3.
类要封装,防止被继承后派生添加实例
4.
饿汉、懒汉两种类型,各有千秋

抽象工厂(AbstractFactory)

提供一个接口,让该接口负责创建一系列"相关或相互依赖的对象",无需指定他们的具体类

对象委托

 

建造者(Builder)

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

对象委托

各细节流程不同,但装配方式一致时,可以使用建造者模式以规范流程

工厂方法(FactoryMethod)

定义一个用于创建对象的接口,让子类决定实例化哪个类(使一个类的实例化延迟到子类)

类继承

1.包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户
端,去除了与具体产品的依赖
2.
使用添加新功能时,只要修改客户端代码

原型(Prototype)

指定创建对象的种类,然后通过拷贝这些原型来创建新的对象

实例注入

1.clone 浅拷贝,复制值类型,不复制引用类型
2.copy
深拷贝,值类型与引用类型都做复制

 

 

参考资料:

http://blog.youkuaiyun.com/qinysong/article/details/1009950

http://www.cnblogs.com/flashlm/archive/2009/02/10/CreationalPatterns.html

http://www.cnblogs.com/kid-li/archive/2006/10/25/539802.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值