专注IT技术、资源分享!
【设计模式系列】原型模式
【设计模式系列】原型模式

【设计模式系列】原型模式

我是小黑,一个在互联网“苟且”的程序员。

流水不争先,贵在滔滔不绝

前言

原型设计模式是创建型设计模式之一,主要用于提供一种创建对象的机制。

其他创建型设计模式扩展阅读:

当一个对象的创建工厂很复杂,需要大量的时间和资源,每创建一次对象变得很昂贵,并且在已经有一个类似的对象时,就可以使用原型设计模式,来降低对象创建的成本,解约资源。

原型模式提供了一种机制,可以将原始对象复制到新对象中,然后根据需要对其进行修改。java中的原型设计模式使用clone()来复制对象。

场景

举个例子可能更容易理解原型设计模式,比如我们有一个对象是从数据库中加载出来的资源对象,现在需要在应用程序中多次对这个对象进行修改或使用。因此每次从数据库中重新加载这个对象或者使用new关键字重新创建不是一个好的处理方式。

更好的方法是将现有对象克隆为新对象,然后进行数据操作。

原型设计模式要求要被复制的对象必须提供可复制的特性。而其他任何类的对象都不应该提供可被复制的特性。在克隆对象时,使用对象属性的浅拷贝还是深拷贝取决于场景的需求和具体设计。

原型设计模式代码结构

下面是一个使用原型设计模式的代码示例:

package com.heiz.design.prototype;

import java.util.ArrayList;
import java.util.List;

public class Employees implements Cloneable{

private List<String> empList;

public Employees(){
empList = new ArrayList<String>();
}

public Employees(List<String> list){
this.empList=list;
}
public void loadData(){
//模拟从数据库中加载数据
empList.add("小黑说Java");
empList.add("小黑说Python");
empList.add("小黑说JavaScript");
empList.add("小黑说PHP");
}

public List<String> getEmpList() {
return empList;
}

   // clone方法用于对象的复制
@Override
public Object clone() throws CloneNotSupportedException{
List<String> temp = new ArrayList<String>();
for(String s : this.getEmpList()){
temp.add(s);
}
return new Employees(temp);
}
}

注意代码中的clone()方法,用于对Employees的深拷贝。

接下来我看使用一个简单测试代码看看如何使用原型设计模式:

package com.heiz.design.test;

import java.util.List;
import com.heiz.design.prototype.Employees;

public class PrototypePatternTest {

public static void main(String[] args) throws CloneNotSupportedException {
Employees emps = new Employees();
emps.loadData();
//使用克隆方法克隆出新对象
Employees empsNew = (Employees) emps.clone();
Employees empsNew1 = (Employees) emps.clone();
List<String> list = empsNew.getEmpList();
list.add("小黑说HTML");
List<String> list1 = empsNew1.getEmpList();
list1.remove("小黑说Go");

System.out.println("emps List: "+emps.getEmpList());
System.out.println("empsNew List: "+list);
System.out.println("empsNew1 List: "+list1);
}
}

以上就是原型设计模式的所有内容,如果对你有所帮助,点赞是对我最大的鼓励!

发表回复

您的电子邮箱地址不会被公开。