关于“创建型”设计模式的理解

在我想做设计模式与ts的对应的时候,没有系统的做一个统一的模式说明,如果我理解的有偏差,希望指正。

设计模式从出现到现在,已经不止23种,但是我们可以先来了解基本现有的创建型模式:

1, 抽象工厂模式

为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。

2,工厂方法模式

定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。

区别:引用 https://blog.csdn.net/liu88010988/article/details/50799902

工厂方法模式

抽象工厂模式

针对的是一个产品等级结构针对的是面向多个产品等级结构
一个抽象产品类多个抽象产品类
可以派生出多个具体产品类每个抽象产品类可以派生出多个具体产品类
一个抽象工厂类,可以派生出多个具体工厂类一个抽象工厂类,可以派生出多个具体工厂类
每个具体工厂类只能创建一个具体产品类的实例每个具体工厂类可以创建多个具体产品类的实例

3,生成器模式

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

抽象工厂模式与生成器相似,因为它也可以创建复杂对象。主要的区别是生成器模式着重于一步步构造一个复杂对象。而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的)。生成器在最后的一步返回产品,而对于抽象工厂来说,产品是立即返回的。

组合模式通常是用生成器生成的。

4,惰性初始模式

推迟对象的创建、数据的计算等需要耗费较多资源的操作,只有在第一次访问的时候才执行。

"惰性工厂"

设计模式的观点来说,惰性初始通常会和工厂方法模式合作,这结合了三种构想:

  • 使用一个工厂去得到一个类别的实例(工厂方法模式)。
  • 将实例存在一个杂凑中,所以下次要求一个实例却有相同参数时,可以得到同一个实例(可和单例模式来做比较)。
  • 在第一次时,使用惰性初始来实例化物件(惰性初始模式)。

5,对象池模式

通过回收利用对象避免获取和释放资源所需的昂贵成本。

对象池(英语:object pool pattern)是一种设计模式。一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象。池的用户可以从池子中取得对象,对其进行操作处理,并在不需要时归还给池子而非直接销毁它。这是一种特殊的工厂对象。

若初始化、实例化的代价高,且有需求需要经常实例化,但每次实例化的数量较少的情况下,使用对象池可以获得显著的效能提升。从池子中取得对象的时间是可预测的,但新建一个实例所需的时间是不确定。

6,原型模式

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

原型模式创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。

原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。

7,单例模式

确保一个类只有一个实例,并提供对该实例的全局访问。

单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。

单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。

单列模式又分为两种,

  • 懒汉式 使用时创建,注意被多线程调用,否则线程不安全,需要加上锁synchronized
  • 饿汉式 直接创建,线程安全

8,多例模式

确保一个类只有命名的实例,并提供对这些实例的全局访问。

多例模式可以有多个实例。

9,资源获取为初始化(RAII)

通过绑定到合适对象的生命周期来确保资源被适当地释放。

是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。

9中时目前有的创建型的设计模式,这里基本上在java的框架中都会涉及到,而且并不会单一出现,比如工厂模式中有单例模式,有时候我也很难分清楚这里面包含的设计模式有多少,但是目前就上面出现的模式来说,我基本上都用过,只是很难一一对号入座。

作为开发人员,埋头开发是一种乐趣,更多的探讨也是一种乐趣,希望能做的多,也能说的出来,知其然并知其所以然!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值