【原型设计模式】原型模式说, 克隆现有对象而不是创建新对象, 也可以根据要求进行定制。
如果创建新对象的成本昂贵且占用大量资源, 则应遵循此模式。
原型模式的优势
原型模式的主要优点如下:
- 它减少了子分类的需要。
- 它隐藏了创建对象的复杂性。
- 客户可以在不知道对象是哪种类型的情况下获取新对象。
- 它使你可以在运行时添加或删除对象。
- 在运行时实例化类时。
- 当创建对象的成本昂贵或复杂时。
- 当你希望使应用程序中的类数保持最少时。
- 当客户端应用程序不需要知道对象的创建和表示时。
文章图片
- 我们将创建一个包含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");
} publicEmployeeRecord(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.
输出量
文章图片
推荐阅读
- 代理模式
- 观察者模式
- 对象池模式
- Android PullToRrefresh 自定义下拉刷新动画 (listviewscrollview等)
- POJ2385Apple Catching(简单DP)
- 体验Windows 2008 R2的RemoteApp
- Android 制作类似支付圆圈和打钩界面ProgressWheel
- Android零基础入门第60节(日历视图CalendarView和定时器Chronometer)
- Make You Happy