重构与对象封装
来源:互联网 发布:mysql bin是什么文件 编辑:程序博客网 时间:2024/05/16 15:22
背景说明:某公司面临一定数量的员工裁撤,要根据每个员工的个人情况分发这一年的工资。
程序编写目的:一是加强对象封装的练习,二是对方法的重构进行一次小小的应用,鄙人认为,方法的重构在面向对象的领域里面能够极大程度的提高方法的可复用性,减少了注释,增加了可读性
//驱动类
pubic class TestCountingMoney{
public static void main(String[] args){
CountMoney cm = new CountMoney();
WokerInfro WI;
String WorkerName[5] = new WorkerName("蒋云峰","许树林","张政","胡新华","高学义");
int Woring_age[5] = new Working_age(12,13,10,12,6);
String WorkerPos[5] = new WorkerPos("AdavancedWorker","Adavanced Worker","AdavancedWorker","MidAdavanced Worker","MidAdavanced Worker");
for(int i = 0;i <= 4;i++){
WI = new WokerInfor(WorkerPos[i],Woring_age[i],WorkerName[i],++i);
cm.ChooseAndCount_EarnMoney(WI);
System.out.println("worker id is:" + WI.GetId());
System.out.println("WI:" + WorkerName[i] + "Pos is"+ WorkerPos[i] + "Total Money is:" + cm.GetYearMoney());
}
}
}
//计算每个将要被裁的员工的工资
class CountMoney {
intMonthMoney[] = new MonthMoney[];
intYearMoney;
intMonth_Courage;
pubic int Print_EarnMoney(WorkerInfor p){
/***
可以用来提取方法的重构内容
if((p.GetPos() == "Adavanced Worker") &&(p.GetWorkingage() >= 10)){
/***
这是第二层可以重构的内容
for(int i = 0;i <= 11;i++){
MonthMoney[i] = 3000 + i * 100;
YearMoney = YearMoney + MonthMoney[i];
}
***/
else if((p.GetPos() == "MidAdavanced Worker") &&(p.GetWorkingage() >= 10) )
for(int i = 0;i <= 11;i++){
MonthMoney[i] = 2500 + i * 100;
YearMoney = YearMoney + MonthMoney[i];
}
else if((p.GetPos() == "MidAdavanced Worker") &&(p.GetWorkingage() < 10)){
for(int i = 0;i <= 11;i++){
MonthMoney[i] = 2000 + i * 50;
YearMoney = YearMoney + MonthMoney[i];
}
******/
//被重构后的语句被下面的第一条函数语句替代,这就是重构中所谓的提取方法。提取方法一般分为两种情况:一种情况是方法语句后面使用了外层方法定义的局部变量,则必须有返回值;
//第二种情况是方法没有返回值,前提是后面的语句和被重构的内容无利害关系。本程序演示的是方法提取的第二种情况,后面的程序输出语句用到的只是本类中的成员变量。
ChooseAndCount_EarnMoney(p); //重构内容的替代方法
System.out.println(p.GetName() + "MonthMoney is:" +MonthMoney);
System.out.println(p.GetName() + "YearMoney is:" +YearMoney);
}
}
//第一次重构后的方法
public voidChooseAndCount_EarnMoney(WorkerInfor p){
if((p.GetPos() == "Adavanced Worker") && (p.GetWorkingage()>= 10)){
Month_Courage = 150;
Count_EarnMoney(); //第二次可以重构的内容所提取出的方法,请读者自行分析为何无需返回值
}
else if((p.GetPos() == "MidAdavanced Worker") &&(p.GetWorkingage() >= 10) ){
Month_Courage = 100;
Count_EarnMoney();
}
elseif((p.GetPos() == "MidAdavanced Worker") &&(p.GetWorkingage() < 10)){
Month_Courage = 50;
Count_EarnMoney();
}
}
//第二次重构后的内部方法
public void Count_EarnMoney(){
for(int i = 0;i <= 11;i++){
MonthMoney[i] = 3000 + i * Month_Courage;
YearMoney = YearMoney + MonthMoney[i];
}
}
public int GetYearMoney(){
return YearMoney;
}
public void SetYearMoney(int ym){
this.YearMoney = ym;
}
public int GetMonthMoney(int index){
return MontyMoney[index];
}
public void SetMonthMoney(int index,intActualMoney){
MonthMoney[index] = ActualMoney;
}
}
//员工的个人情况
class WorkerInfor {
String pos = null;
String name = null;
intWorking_age;
intWorkerIndex;
public Position(String pos,int Working_age,Stringname,int WorkerIndex){
this.pos = pos;
this.Working_age = Working_age;
this.name = name;
this.WorkerIndex = WorkerIndex;
}
public String GetPos(){
return pos;
}
public void SetPos(String s){
this.pos = s;
}
public String GetName(){
return name;
}
public void SetWorkingage(int wa){
this.Workingage = wa;
}
public int GetWorkingage(){
return Workingage;
}
pubic int GetId(){
return WorkerIndex;
}
}
- 重构与对象封装
- JavaScript重构(十):强化对象封装和模块封装
- 重构--封装结构
- 【读书笔记-重构与模式】 策略模式Strategy--封装变化
- 关于重构---封装字段
- 机房重构-封装模块
- 代码重构-封装字段
- 读取配置文件-重构封装
- javascript面向对象与封装
- json对象封装与解析
- java 类与对象-封装
- java面对对象 ,类与对象,封装
- 重构XmlDom对象
- C# 重构之三(封装字段重构)
- 重构31式之封装集合
- IOS-筛选功能之封装重构
- 登录脚本重构by封装
- Delphi面向对象:继承与封装
- java多线程总结(二)(转载)
- Continuous Feedback in Agile Teams
- 黑马程序员 模仿ArrayList去实现一个自定义的集合
- 《Head First设计模式》要点(三)
- C#上机 第八周 任务8 移位运算来避免乘法运算
- 重构与对象封装
- 如何从SQLServer类型转换成Oracle对应的数据类型
- Eclipse 引用扩展点、收集扩展点
- 黑马程序员 多线程(二)
- 如何在windows下安装linux
- CSS手册布局overflow
- JavaScript带小数金额计算
- 将DataRow[]转换成DataTable
- 通过游戏学java(适合初学者)