【设计模式】单例模式 |建造者模式 |原型模式

单例模式

通常我们让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责八寸他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

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

![这里写图片描述](https://img-blog.csdn.net/20180807102413154?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZTl94ajk0NTEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) **优点:** 它会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 可以灵活的更改实例化过程

缺点:
不能解决删除单个对象的问题

适用环境:

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

例子:一个系统中只能有一个窗口管理器或者文件系统,若是存在多个,再使用的时候就意味着会弹出多个,这样对内存空间也是一种浪费。

建造者模式

看到这个模式的时候,感觉就是自己是一个工程师,可以创建很多意想不到的产品。它也称为:生成器模式。可以将产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程具有不同的内部表象的产品对象。

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

![这里写图片描述](https://img-blog.csdn.net/20180807105022238?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZTl94ajk0NTEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

适用环境:

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式
  • 当构造过程必须允许被构造的对象有不同表示时。

例子:在这个智能的世界,一个智能的工厂里面,每个地方都有自己应该做的事情人就是指挥者,将机器调整到要做出的产品的样子,之后只要不用思考要怎么弄,只要按照要求做好就可啦。

原型模式

其实就是从一个对象再创建另外一个可制订的对象,而且不需要知道任何创建的细节。

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

![这里写图片描述](https://img-blog.csdn.net/20180807110054798?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZTl94ajk0NTEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) **适用环境:**
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
  • 为了避免创建一个与产品类层次平行的工厂类层次时

深复制与浅复制

  • 深复制:把引用对象的变量指向复制过程的新对象
  • 浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象

例子:深复制感觉有点像克隆羊的感觉,复制出来是一个新的个体,而浅复制则是给这只羊改了名字,尽管名字不一样了但是还是这只羊。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值