设计模式——创建型模式之单例and原型模式

设计模式

系列文章:

一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式
五、结构型模式——代理、适配器模式



前言

设计模式是进行实际开发的基石,是前人不断总结试错得出的宝贵开发经验,也是开发人员之间相互理解共同设计的关键标准。学习设计模式能够帮助我们初学者更好理解结构化的开发流程,摆脱只会写一段代码而不能上升为一个项目的不上不下的尴尬处境


一、单例模式是什么?

单例模式:只允许程序中实例化一次,保证其他任何对该类的使用都只通过一个对象。

这种设计模式下限制了一个类的实例次数(仅限1次),保证了程序的任何部分,只要是使用该类,都是使用的一个对象。

二、单例的好处及基本方法

考虑这样一个场景:
在一个自动化工厂中,需要给每个出场的产品编号(独一无二),现在要求一个工人负责给所有产品编号,叫做“编号工程师”,但是二号流水线的负责人不知道已经有了这样一个人负责了,于是他也安排了一个“编号工程师”,于是出现了编号冲突。
现在我们引入单例设计模式,在安排人负责编号之前,先判断是否有人已经负责了,如果没有,安排一个,有则直接叫该“工程师”开始编号。

由此:单列解决了以上逻辑问题,减少了开销(只用一个人负责),方便流水线之间通信(在程序中就是不同线程or不同类)。

具体的类图如下:
在这里插入图片描述

static SingleModule getSingleModule(){
	if(itself==null){
		itself=new SingleModule();
	}
	return itself;
}
  • 小Tips:在多线程中,这样还是不太安全,还需要同步锁的机制确保只建立的一个实例

三、原型模式

原型模式:创造出能够通过原型实例指定创建对象的种类,任何通过复制一个已有的对象实现创造一个内容相同的对象。

为了进行具体的理解,根据上面的例子继续:
该工厂目前正在开发一款新产品,并对此调整了很多参数,要想实现该产品的生产,如果对每个产品进行庞大参数的调整,十分麻烦。因此,工厂的研究员通过实现一种能够直接复制现有产品的方法,就避免了产品生产过程细节的无意义重现,隐藏了创建细节。

具体类图如下:
在这里插入图片描述
一个Clone实例:

class Product implements ProtrType{
	private String productName;
	private int productFree;
	Product (String n,int f){
		this.productName=n;
		this.productFree=f;
	}
	
	public void Clone(){
		Product  newProduct=new Product (this.productName,this.productFree);
		return newProduct;
	}
}
  • 小Tips:JAVA其实本身就存在这样一个ProtrType叫做Cloneable

四、原型模式的深/浅拷贝

在这里插入图片描述

如图所示:ProductB由ProductA复制,其中的属性ClassA是浅拷贝,两个成员变量指向同一个对象,但是ClassB是深拷贝,ProductB的ClassB成员指向的对象是基于ProductA指向的ClassB的克隆。

ClassA的修改会导致双方修改,而ClassB的修改独属于自己。

求赞

作者长期更新,如果觉得本文还算不错的话,请给我一个大大的赞!!!
如果非常赞同这篇文章,请关注我,持续了解更多精彩博文!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码之狐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值