原型模式说, 克隆现有对象而不是创建新对象, 也可以根据要求进行定制。
如果创建新对象的成本昂贵且占用大量资源, 则应遵循此模式。
原型模式的优势
原型模式的主要优点如下:
- 它减少了子分类的需要。
- 它隐藏了创建对象的复杂性。
- 客户可以在不知道对象是哪种类型的情况下获取新对象。
- 它使你可以在运行时添加或删除对象。
原型模式的用法
- 在运行时实例化类时。
- 当创建对象的成本昂贵或复杂时。
- 当你希望使应用程序中的类数保持最少时。
- 当客户端应用程序不需要知道对象的创建和表示时。
原型模式的UML
- 我们将创建一个包含Prototype类型的方法getClone()的接口Prototype。
- 然后, 我们创建一个具体的类EmployeeRecord, 该类实现了Prototype接口, 该接口可以克隆EmployeeRecord对象。
- PrototypeDemo类将使用此具体类EmployeeRecord。
原型设计模式示例
让我们看一下原型设计模式的例子。
interface Prototype {
public Prototype getClone();
}//End of Prototype interface.
class EmployeeRecord implements Prototype{
private int id;
private String name, designation;
private double salary;
private String address;
public EmployeeRecord(){
System.out.println(" Employee Records of Oracle Corporation ");
System.out.println("---------------------------------------------");
System.out.println("Eid"+"\t"+"Ename"+"\t"+"Edesignation"+"\t"+"Esalary"+"\t\t"+"Eaddress");
}
public EmployeeRecord(int id, String name, String designation, double salary, String address) {
this();
this.id = id;
this.name = name;
this.designation = designation;
this.salary = salary;
this.address = address;
}
public void showRecord(){
System.out.println(id+"\t"+name+"\t"+designation+"\t"+salary+"\t"+address);
}
@Override
public Prototype getClone() {
return new EmployeeRecord(id, name, designation, salary, address);
}
}//End of EmployeeRecord class.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class PrototypeDemo{
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter Employee Id: ");
int eid=Integer.parseInt(br.readLine());
System.out.print("\n");
System.out.print("Enter Employee Name: ");
String ename=br.readLine();
System.out.print("\n");
System.out.print("Enter Employee Designation: ");
String edesignation=br.readLine();
System.out.print("\n");
System.out.print("Enter Employee Address: ");
String eaddress=br.readLine();
System.out.print("\n");
System.out.print("Enter Employee Salary: ");
double esalary= Double.parseDouble(br.readLine());
System.out.print("\n");
EmployeeRecord e1=new EmployeeRecord(eid, ename, edesignation, esalary, eaddress);
e1.showRecord();
System.out.println("\n");
EmployeeRecord e2=(EmployeeRecord) e1.getClone();
e2.showRecord();
}
}//End of the ProtoypeDemo class.
评论前必须登录!
注册