可以做兼职的网站有哪些,seo优化销售,安卓网页编辑器,加盟好项目前言#xff1a; 为什么之前写过Golang 版的设计模式#xff0c;还在重新写Java 版#xff1f; 答#xff1a;因为对于我而言#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很… 前言 为什么之前写过Golang 版的设计模式还在重新写Java 版 答因为对于我而言当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言更适合用于学习设计模式。 为什么类图要附上uml 因为很多人学习有做笔记的习惯如果单纯的只是放一张图片那么学习者也只能复制一张图片可复用性较低附上uml方便有新理解时快速出新图。 [设计模式Java实现附plantuml源码]专链
确保对象的唯一性单例模式集中式工厂的实现简单工厂模式多态工厂的实现——工厂方法模式产品族的创建——抽象工厂模式对象的克隆原型模式 文章目录 原型模式代码简单实现原型模式总结原型模式的主要优点如下原型模式的主要缺点如下 适用场景 原型模式 startumlabstract class Prototype implements Cloneable {- String name; clone(): Prototype;}class ConcretePrototypeA extends Prototype { clone(): Prototype;
}class ConcretePrototypeB extends Prototype { clone(): Prototype;
}class Client{}Client -up- ConcretePrototypeAenduml在原型模式结构图中包含以下3个角色。 1Prototype抽象原型类它是声明克隆方法的接口是所有具体原型类的公共父类可以是抽象类也可以是接口甚至还可以是具体实现类。 2ConcretePrototype具体原型类它实现在抽象原型类中声明的克隆方法在克隆方法中返回自己的一个克隆对象。 3Client客户类)让一个原型对象克隆自身从而创建一个新的对象在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程因此用户可以根据需要选择具体原型类系统具有较好的可扩展性增加或更换具体原型类都很方便。
代码简单实现
package create;public class PrototypeTest {public static void main(String[] args) {Prototype prototype new Prototype();prototype.setName(hello);System.out.println(prototype);Prototype clone prototype.clone();System.out.println(clone);System.out.println(prototype.getName());System.out.println(clone.getName());}}// 原型类
class Prototype implements Cloneable {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}Overrideprotected Prototype clone(){try {return ((Prototype) super.clone());} catch (CloneNotSupportedException ignored) {System.out.println(当前对象不支持拷贝);}return null;}
}
原型模式总结 注意深浅拷贝 原型模式的主要优点如下
1当创建新的对象实例较为复杂时使用原型模式可以简化对象的创建过程通过复制一个已有实例可以提高新实例的创建效率。 2扩展性较好。由于在原型模式中提供了抽象原型类在客户端可以针对抽象原型类进行编程而将具体原型类写在配置文件中增加或减少具体原型类对原有系统都没有任何影响。 3原型模式提供了简化的创建结构。工厂方法模式常常需要有一个与产品类等级结构相同的工厂等级结构而原型模式就不需要这样。原型模式中产品的复制是通过封装在原型类中的克隆方法实现的无须专门的工厂类来创建产品。 4可以使用深克隆的方式保存对象的状态。使用原型模式将对象复制一份并将其状态保存起来以便在需要的时候使用例如恢复到某一历史状态可辅助实现撤销操作。
原型模式的主要缺点如下
1需要为每一个类配备一个克隆方法而且该克隆方法位于一个类的内部。当对已有的类进行改造时需要修改源代码违背了开闭原则。 2在实现深克隆时需要编写较为复杂的代码而且当对象之间存在多重的嵌套引用时为了实现深克隆每一层对象对应的类都必须支持深克隆实现起来可能会比较麻烦。
适用场景
在以下情况下可以考虑使用原型模式 1创建新对象成本较大例如初始化需要占用较长的时间占用太多的CPU资源或网络资源。新的对象可以通过原型模式对已有对象进行复制来获得如果是相似对象则可以对其成员变量稍作修改。 2如果系统要保存对象的状态而对象的状态变化很小或者对象本身占用内存较少时可以使用原型模式配合备忘录模式来实现。 3需要避免使用分层次的工厂类来创建分层次的对象并且类的实例对象只有一个或很少的几个组合状态。通过复制原型对象得到新实例可能比使用构造函数创建一个新实例更加方便。