请忽略语言语法,我想在这里只讨论 OOPS。
我将在这里展示 2 个代码片段,每个都是 Composition 的示例(如果我没记错的话)。
问题陈述:我有一个对象,它保存系统中实体的统计信息。让这些统计数据为:
- 姓名
- 姓
- 薪水
*这些字段可以是任何东西,我只是以这些为例。所以请不要考虑什么领域是必要的。假设这三个都是必要的。
我创建了一个对应于这些字段的类:
public class Stats{
field Name;
field LatsName;
field Salary;
}
现在我遇到了一种情况,我想要跨时间段获取有关一个人的信息。让我们看看工作流系统中的某个点需要在所有三个阶段向它呈现一个人的信息
- 他小时候。
- 当他年轻的时候。
- 当他退休时。
这里要注意的是,name
不会lastName
改变,只有薪水可能会改变。正因为如此,我认为我也许可以创建一个可以使用现有对象“统计”的类。
我将提出两种解决方案,请建议哪一种更好以及为什么。
代码示例 1
public class CompositeStats{
//Adding three more properties and hinding the one already existing.
private objStats= new Stats();
public field FirstName{
get{return objStats.Name;}
set{objStats.Name=value;}
}
public field LastName{
get{return objStats.LastName;}
set{objStats.LastName=value;}
}
public field SalaryChild{get;set;}
public field SalaryYoung{get;set;}
public field SalaryRetired{get;set;}
}
在上面的示例代码中,我没有暴露原始的工资字段,而是为每个时间跨度创建了 3 个新字段。
代码示例 2
public class CompositeStats{
private objStatsChild= new Stats();
private objStatsYoung= new Stats();
private objStatsRetired= new Stats();
public field FirstName{
get{return objStatsChild.Name;}
set{objStatsChild.Name=value;}
}
public field LastName{
get{return objStatsChild.LastName;}
set{objStatsChild.LastName=value;}
}
public field SalaryChild{
get{return objStatsChild.Salary;}
set{objStatsChild.Salary=value;}
}
public field SalaryYoung{
get{return objStatsYoung.LastName;}
set{objStatsYoung.LastName=value;}
}
public field SalaryRetired{
get{return objStatsRetired.LastName;}
set{objStatsRetired.LastName=value;}
}
}