GOF之创建型模式(重点)

单例设计模式

作用:减少系统开销,优化资源共享访问
UML:
在这里插入图片描述

分类

1)、饿汉式(不可延时加载) 可能造成资源浪费
枚举型:天然的单例设计模式(可防止反射和反序列化)

enum EnumUnique {
 	//该属性是枚举EnumUnique的实例
 	instance;
	//可添加方法
 	public void operation() {
  		System.out.println("枚举单例设计模式");
 	}
 }

2)、懒汉式 (可延时加载)
①double checking (synchronized,volatile(防止指令重排,同步数据)):受JVM底层机制影响,一般不使用 。
②静态内部类式:类的加载是天然线程安全,加载一个类时,其内部类不会同时被加载。
一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。

PS:单例设计模式会被破解
①反序列化(将对象写入文件,再提取出来)
序列化时,需实现Serializable接口,防止反序列化可定义readResolve():是一种回调,直接返回对象。

private Object readResolve() throws ObjectStreamException{  
	 return instance;
}

②反射(提取私有构造器强制建立对象)
防止方法:可在构造器中手动抛出异常

工厂模式(Product + Factory)

①简单工厂模式(直接建立工厂)
可扩展性低,只能进行修改
ps:可在工厂中通过反射获取对象来解决修改问题
UML:
在这里插入图片描述
②工厂方法模式(使用接口,实现接口建立不同的工厂)
满足开闭原则:对修改关闭,对扩展开放,但较为复杂,一般推荐使用简单工厂模式
前两者都只针对与一个产品。
在这里插入图片描述
③抽象工厂模式(具有多个产品,通过工厂可以创建多个产品)
针对于一条线上的多个产品,不能增加新的产品,只能增加产品族
UML:
在这里插入图片描述

建造者模式 (Builder(实现接口) + Director)

Builder : 创造组件(可与工厂模式联系)
Director :进行装配(返回装配成功后的对象)
UML:
在这里插入图片描述

原型模式(prototype)

通过new产生一个对象需要非常繁琐的数据准备或访问权限,则使用原型模式(进行克隆:类似于new,不同于new)
产生对象属性值相同,但存储位置不同,即引用不同,是两个不同的对象。

内存复制操作:
java中提供了clone()(必须实现Cloneable接口:标记接口)
重写clone()通过super调用基类clone(),将所得对象直接进行返回

@Override
 protected Object clone() throws CloneNotSupportedException {
  	return super.clone();
 }

ps: clone()方法是object的方法,本地方法
浅克隆:在克隆新的对象时,新旧两个对象引用属性所指向的是同一个数据
深克隆:克隆出的新的对象,将引用属性也进行拷贝
深克隆的实现:在clone()方法中,将对象的引用属性也进行clone操作
如:对于date对象

@Override
 protected Object clone() throws CloneNotSupportedException {
  	//将克隆对象的引用属性也进行克隆
  	Object object = super.clone();
  	PassiveDeepClone deep = (PassiveDeepClone)object;
  	deep.whDate = (Date)this.whDate.clone();
  	return deep;
 }

UML:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值