设计模式笔记(1)-Creational 模式

1 Creational 模式

1.1 Simple Factory

  Simple factory 很简单,比如现在有一个 Entity 类,如果我们要将这个类的代码提供给客户,但是又不想让客户知道它的构造细节,那么使用工厂方法来创建这个类的实例最好不过。它实际上就是另外创建一个 Factory 类,包含一个方法 GetEntity() ,它返回一个 Entity 类的对象。它的内容其实就是原先的 Entity 类构造函数的内容。

1.2 Abstract Factory

       有时候问题不像 1.1 中那么简单, Entity 类的构造过程可能包含多个组件的初始化,而这些组件都非常复杂,或者需要可以调换其中的某一个组件。这时需要对每一个组件 Parti 分别按照 1.1 的方法在 AbstactFactory 类中创建一个方法来构建这个组件,需要创建 Entity 对象时分别调用 Abstact Factory 类中的方法类构建每个组件。

1.3 Factory Method

       前面两节都只涉及到 Entity 和一个创建该 Entity Factory 类,现在需要再引入一个类 Operator Operator 需要创建一个 Entity 对象,并对它进行操作,但是 Entity 可能包含很多个子类 Entityi ,他们拥有一些 Operator 需要用到的相同的接口,还包括一些不同的属性或方法。对于每一个子类 Entityi ,Operator 也会有一个对应的子类 Operatori 来处理它。这样在 Operator 中就不需要去创建 Entity 对象,而是将对象的创建降低到子类中去进行,在 Operator 中创建一个抽象方法用于创建 Entity ,但不去实现它,它的实现交由子类去完成。

1.4 Builder

       好吧,现在要构建的 Entity 更复杂了,它是由多个组件构成的,这与 Abstact Factory 相同,但是我们的需求更高,这些组件还有不同的组合方式。现在我们需要将组件的创建和组件的组合分开。

       它的实现与 Abstact Factory 相似,区别在于,构造每个组件的同时还可以指定它位于 Entity 的那个部分。

 

1.5 Prototype

       OK ,对象的创建已经够复杂了,现在喘口气,来讨论一个简单一点的问题。有时候遇到一个很复杂的对象需要创建,创建它需要花费很多的时间,但是幸运的是我们已经有一个与它完全一样的对象了,需要做的只是将它复制一份。这就是 prototype 模式,差不多就是拷贝构造函数的意思。

 

1.6 Singleton

       这也许是最简单的模式了,某些情况下,我们需要一个对象永远只有一个实例,比如一个 java 程序运行的时候,永远都只有一个 RunTime 类的实例,我们不能让任何其它类去实例化它,否则一定会存在多个实例存在的可能。于是只能让它自己去做这件事情,在类的内部创建一个自身的静态的实例,并采用私有的构造函数,采用一个静态的方法来获取这个实例。

       当程序多线程执行的时候,需要考虑多个线程同时实例化这个静态对象的可能,所以构建静态对象的函数需要进行同步,不允许多个线程同时进入,从而导致多个实例出现的可能。

 

1.7 Register of Singleton

       当需要多个单例的时候,要怎么办呢,你当然可以使用多个类,每个类都如同 singleton 一样去实现,但是用起来不是很麻烦吗,这就需要用到 Register of Singleton 了。

         它首先将每个需要用到的单例注册,在需要用到单例的时候再返回指定的单例,其实也就是一个列表用来返回单例的对象,不同的是它要保证每个对象都是唯一的。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值