——“面向对象的三大特性是什么?” ——“封装、继承、多态。”
↑ 琥珀就是一种非常美的“封装”。
public class Data{
private String idNo;
public Data(String idNo){
this.idNo = idNo;
}
public String getIdNo(){
return this.idNo;
}
private Date parseBirthday(String idNumber){
if(idNumber.length() == 15){
String birthdayStr = idNumber.substring(5,8);
return DatUtils.parse(birthdayStr,"yyMMdd");
}else if(idNumber.length() == 18){
String birthdayStr = idNumber.substring(5,13);
return DatUtils.parse(birthdayStr,"yyyyMMdd");
}
return null;
}
public Date getBirthday(){
if(this.idNo != null){
return parseBirthday(idNo);
}
return null;
}
}
↑ 还记得这个吗?装进去之后要及时贴上封条,不然大魔王就要逃出来了。图源网。
↑ 近期在家办公的各位,相信都体会到工作时没人打扰的重要性了吧!图源网。
↑ 就像插线板一样:能“装”下各种线路、元件,还要能“封”成简单的三脚插座、两脚插座。图源网。
public interface PayService{
PayResult pay(PayReq req);
}
public class BuyBizImpl implements BuyBiz{
private PayService payService;
public void buy(Order order){
PayReq req = geneartePayReq(order);
PayResult result = payService.pay(req);
// 略
}
}
public interface PayService{
PayResult pay(PayReq req);
PayResult newPay(NewPayReq req);
boolean useNewPay(Order order);
}
public class BuyBizImpl implements BuyBiz{
private PayService payService;
public void buy(Order order){
PayResult result;
if(payService.useNewPay(order)){
PayReq req = geneartePayReq(order);
result = payService.newPay(req);
}else{
NewPayReq req = genearteNewPayReq(order);
result = payService.pay(req);
}
// 略
}
}
"高内聚"与"低耦合"是软件设计和开发中经常出现的一对概念。它们既是做好设计的途径,也是评价设计好坏的标准。"高内聚"是说,一个业务应当尽量把它所涉及的功能和代码放到一个模块中。"低耦合"则是说,一个业务应当尽量减少对其它业务或功能模块的依赖。 花园的景昕,公众号:景昕的花园高内聚与低耦合
↑ 就像面包板互联一样:既不能把相关元件组装在一起、又不能把无关元件隔离开,最后就只能乱成一团。
public class User{
public int age;
public String idNo;
// 其它,略
}
public class InsuranceService{
public Insurance apply(User user){
if(user.age <= 18 or user.age >= 80){
throw new BizException();
}
// 其它,略
}
}
public class User{
private int age;
private String idNo;
public int getAge(){
// 这是原先的取值方法
// return this.age;
// 这是修改后的取值方法,“不到十行”=。=
return IdCardUtils.parseAge(this.idNo);
}
}
public class InsuranceService{
public Insurance apply(User user){
if(user.getAge() <= 18 or user.getAge() >= 80){
throw new BizException();
}
// 其它,略
}
}