我的场景属于原型设计模式吗?
Is my scenario come under Prototype Design Pattern?
场景一:
我正在为更多部门的绩效和参与机构生成报告。当我在 GUI 中显示报告时,可以按部门绩效和参与(No.of 学生参与)排序。
- 对于这种情况,我应该使用原型设计模式吗?
例如:
public abstract class Report implements Cloneable {
private String id;
protected String type;
public void setId(String id){
id=id;
}
public String getId(){
return id;
}
public String getType(){
return type;
}
abstract void getReportData();
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
public class PerformanceReport extends Report {
public PerformanceReport(){
type = "Performance";
}
@Override
public void getReportData() {
/* Get report data from database and sort based on performance*/
}
}
public class ParticipationReport extends Report {
public ParticipationReport(){
type = "Participation";
}
@Override
public void getReportData() {
/* Get report data from database and sort based on participation*/
}
}
public class ReportCache {
private static Hashtable<String, Report> reportMap = new Hashtable<String, Report>();
public static Report getReport(String reportid) {
Report cachedReport = reportMap.get(reportid);
return (Report) cachedReport.clone();
}
public static void loadCache() {
ParticipationReport participationReport = new ParticipationReport();
participationReport.setId("1");
reportMap.put(report.getId(),report);
PerformanceReport performanceReport = new PerformanceReport();
performancenReport.setId("2");
reportMap.put(report.getId(),report);
}
}
public class PrototypePatternReport {
public static void main(String[] args) {
ReportCache.loadCache();
Report clonedReport = (Report) ReportCache.getReport("1");
System.out.println("Report : " + clonedReport.getType());
Report clonedReport2 = (Report) ReportCache.getReport("2");
System.out.println("Report : " + clonedReport2.getType());
}
}
- 我上面的想法对吗?这个概念与原型模式相关吗?
场景二:
我正在将测验详细信息(问题和选项、答案)存储在一个对象中,当学生请求测验时,我应该加密答案并给出。对于加密的答案,我应该保留另一个对象来提供。我在这种情况下可以使用原型吗?在学生回答后,我应该将学生答案与现有对象进行比较。
当对象初始化成本高昂或当您明确需要一个对象是另一个对象的副本时,原型模式通常很有用。
场景一:
在您的情况下,从数据库中获取报告数据并对其进行排序比实例化一个对象要昂贵得多,并且每个报告都将包含自己的数据(您不会从另一个对象的复制中受益)所以我不会考虑使用原型。
场景二:
在这种情况下,关键是
For encrypted answer i should keep another object to give
在这种情况下,由于您需要另一个对象并且需要确保第二个对象是第一个对象的精确副本,您可以使用原型创建第二个对象,然后更改其属性以确保答案是隐藏的。
场景一:
我正在为更多部门的绩效和参与机构生成报告。当我在 GUI 中显示报告时,可以按部门绩效和参与(No.of 学生参与)排序。
- 对于这种情况,我应该使用原型设计模式吗?
例如:
public abstract class Report implements Cloneable {
private String id;
protected String type;
public void setId(String id){
id=id;
}
public String getId(){
return id;
}
public String getType(){
return type;
}
abstract void getReportData();
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
public class PerformanceReport extends Report {
public PerformanceReport(){
type = "Performance";
}
@Override
public void getReportData() {
/* Get report data from database and sort based on performance*/
}
}
public class ParticipationReport extends Report {
public ParticipationReport(){
type = "Participation";
}
@Override
public void getReportData() {
/* Get report data from database and sort based on participation*/
}
}
public class ReportCache {
private static Hashtable<String, Report> reportMap = new Hashtable<String, Report>();
public static Report getReport(String reportid) {
Report cachedReport = reportMap.get(reportid);
return (Report) cachedReport.clone();
}
public static void loadCache() {
ParticipationReport participationReport = new ParticipationReport();
participationReport.setId("1");
reportMap.put(report.getId(),report);
PerformanceReport performanceReport = new PerformanceReport();
performancenReport.setId("2");
reportMap.put(report.getId(),report);
}
}
public class PrototypePatternReport {
public static void main(String[] args) {
ReportCache.loadCache();
Report clonedReport = (Report) ReportCache.getReport("1");
System.out.println("Report : " + clonedReport.getType());
Report clonedReport2 = (Report) ReportCache.getReport("2");
System.out.println("Report : " + clonedReport2.getType());
}
}
- 我上面的想法对吗?这个概念与原型模式相关吗?
场景二:
我正在将测验详细信息(问题和选项、答案)存储在一个对象中,当学生请求测验时,我应该加密答案并给出。对于加密的答案,我应该保留另一个对象来提供。我在这种情况下可以使用原型吗?在学生回答后,我应该将学生答案与现有对象进行比较。
当对象初始化成本高昂或当您明确需要一个对象是另一个对象的副本时,原型模式通常很有用。
场景一: 在您的情况下,从数据库中获取报告数据并对其进行排序比实例化一个对象要昂贵得多,并且每个报告都将包含自己的数据(您不会从另一个对象的复制中受益)所以我不会考虑使用原型。
场景二: 在这种情况下,关键是
For encrypted answer i should keep another object to give
在这种情况下,由于您需要另一个对象并且需要确保第二个对象是第一个对象的精确副本,您可以使用原型创建第二个对象,然后更改其属性以确保答案是隐藏的。