设计模式
系列文章:一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式
五、结构型模式——代理、适配器模式
前言
设计模式是进行实际开发的基石,是前人不断总结试错得出的宝贵开发经验,也是开发人员之间相互理解共同设计的关键标准。学习设计模式能够帮助我们初学者更好理解结构化的开发流程,摆脱只会写一段代码而不能上升为一个项目的不上不下的尴尬处境
一、单例模式是什么?
单例模式:只允许程序中实例化一次,保证其他任何对该类的使用都只通过一个对象。
这种设计模式下限制了一个类的实例次数(仅限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的修改独属于自己。
求赞
作者长期更新,如果觉得本文还算不错的话,请给我一个大大的赞!!!
如果非常赞同这篇文章,请关注我,持续了解更多精彩博文!!!