创建设计模式 - 原型设计模式

194 篇文章 3 订阅
23 篇文章 0 订阅

 

创建设计模式 - 原型设计模式

 

原型设计模式是Creational Design模式之一,因此它提供了一种对象创建机制。

 

 

原型设计模式

当对象创建成本高昂并且需要大量时间和资源并且您已经存在类似对象时,使用原型设计模式。

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

 

原型设计模式示例

通过一个例子很容易理解原型设计模式。假设我们有一个从数据库加载数据的Object。现在我们需要在程序中多次修改这些数据,因此使用new关键字创建Object 并从数据库再次加载所有数据不是一个好主意。

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

原型设计模式要求您复制的对象应提供复制功能。它不应该由任何其他类完成。但是,是否使用Object属性的浅或深副本取决于要求及其设计决策。

这是一个示例程序,显示了java中的Prototype设计模式示例。

Employees.java


package com.journaldev.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(){
		//read all employees from database and put into the list
		empList.add("Pankaj");
		empList.add("Raj");
		empList.add("David");
		empList.add("Lisa");
	}
	
	public List<String> getEmpList() {
		return empList;
	}

	@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方法被覆盖以提供员工列表的深层副本。

这是原型设计模式示例测试程序,它将显示原型模式的好处。

PrototypePatternTest.java


package com.journaldev.design.test;

import java.util.List;

import com.journaldev.design.prototype.Employees;

public class PrototypePatternTest {

	public static void main(String[] args) throws CloneNotSupportedException {
		Employees emps = new Employees();
		emps.loadData();
		
		//Use the clone method to get the Employee object
		Employees empsNew = (Employees) emps.clone();
		Employees empsNew1 = (Employees) emps.clone();
		List<String> list = empsNew.getEmpList();
		list.add("John");
		List<String> list1 = empsNew1.getEmpList();
		list1.remove("Pankaj");
		
		System.out.println("emps List: "+emps.getEmpList());
		System.out.println("empsNew List: "+list);
		System.out.println("empsNew1 List: "+list1);
	}

}

上述原型设计模式示例程序的输出是:


emps List: [Pankaj, Raj, David, Lisa]
empsNew List: [Pankaj, Raj, David, Lisa, John]
empsNew1 List: [Raj, David, Lisa]

如果未提供对象克隆,我们将不得不进行数据库调用以每次获取员工列表。然后进行本来耗费资源和操作的操作。

这就是java中原型设计模式的全部内容。

 

转载来源:https://www.journaldev.com/1440/prototype-design-pattern-in-java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值