to
class Employee...
static final int ENGINEER = 0;
static final int SALESMAN = 1;
static final int MANAGER = 2;
void setType(int arg) {
_type = EmployeeType.newType(arg);
}
int payAmount() {
return _type.payAmount(this);
}
}
class Engineer...
int payAmount(Employee emp) {
return emp.getMonthlySalary();
}
}
动机
如果对象的行为因其类型而异,请避免编写显示的条件
Switch 声明在面向对象语言中应该尽量少的被使用
你不得不检查对象是否为Null对象
将null值替换为null对象
if (customer == null){
plan = BillingPlan.basic();
}
else{
plan = customer.getPlan();
}
to
class Customer {
}
class NullCusomer extends Customer {
}
动机
对象根据其类型做正确的事情,Null对象也应该遵守这个规则
某段代码需要对程序状态做出某种假设
已断言明确表现这种假设
double getExpenseLimit() {
// should have either expense limit or a primary project
return (_expenseLimit != NULL_EXPENSE) ?
_expenseLimit:
_primaryProject.getMemberExpenseLimit();
}
to
double getExpenseLimit() {
Assert.isTrue (_expenseLimit != NULL_EXPENSE || _primaryProject != null);
return (_expenseLimit != NULL_EXPENSE) ?
_expenseLimit:
_primaryProject.getMemberExpenseLimit();
}
动机
断言是一种明确表达会为true的行为
当断言失败时往往是一个非受控的异常
断言往往在生产代码中移除
交流层面 : 断言能使程序的阅读者理解代码所做的假设
在调试的角度 : 断言能使编程者尽可能近的接触bug
函数的名称不能表达函数的用途
修改函数名称
getinvcdtlmt()
to
getInvoiceableCreditLimit
动机
函数的名称最好能表达函数的意图
某个函数需要从调用端得到更多的信息
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-89441-19.html
伊拉克再听美国猪的话
不管是老旧舰还是新锐舰或航母舰
日本海军普遍吨位3300吨以上