这一节,我们来看看接口是怎么体现多态的。
我们修改一下Application的代码,给接口对象赋值。
private ICustomerService customerService = new CustomerServiceImpl();
CustomerServiceImpl 是 ICustomerService接口的实现类,ICustomerService是父,CustomerServiceImpl 是子,他们有一种父子关系。父类的引用指向子类对象,这个就是多态。
核心代码
Application app = new Application();
//1、读取文本,获取客户资料
List<String> props = app.customerService.loadCustomerFormTxt("D:/customer.txt");
//2、解析客户资料到客户对象
Customer customer = app.customerService.fillCustomer(props);
//3、直接将客户对象保存到Excel中(暂时先不做批量入库了)
boolean isSuccess = app.customerService.saveToExcel(customer,"D:/customer.xls");
if(!isSuccess){
System.out.println("保存失败,系统出现异常!");
}else{
//4、将这个对象存入链表,备用
cstList.add(customer);
}
System.out.print("打印链表---" );
cstList.display();
运行:
image
听说老板曾经在真正的软件公司工作过,这天我跟他请教企业中怎么体现多态了,我看了下我的代码,改了下,然后让我拿去思考。
我看了一下,改动还是挺大的。
1.主类放在了一个包中,所有的类都不推荐放在默认包。
image
2.创建了一个私有方法 saveCustomer,把service对象当做参数传进去。
boolean isSuccess = saveCustomer(app.customerService);
方法如下:
private static boolean saveCustomer(ICustomerService customerService) {
//1、读取文本,获取客户资料
List<String> props = customerService.loadCustomerFormTxt("D:/customer.txt");
//2、解析客户资料到客户对象
Customer customer = customerService.fillCustomer(props);
//3、直接将客户对象保存到Excel中(暂时先不做批量入库了)
boolean isSuccess = customerService.saveToExcel(customer,"D:/customer.xls");
Application.cstList.add(customer);
return isSuccess;
}
目前我对于多态的看法,除了父类引用可以指向子类对象以外,就是这个传参的情况。
boolean isSuccess = saveCustomer(app.customerService);
其实本质还是一样的,因为app.customerService的真实对象,还是CustomerServiceImpl,是子类对象。
我想了很久,终于明白了,多态的好处就是:代码未动,设计先行!
比如这个例子,我只是设计了这个接口需要哪些方法。
//加载文本的客户资料
public abstract List<String> loadCustomerFormTxt(String path);
//填充属性到客户对象
//public 和 abstract可以省略
Customer fillCustomer(List<String> props);
/**
* 保存客户对象到Excel
* @param cst 客户对象
* @param excelPath Excel的路径
* @return
*/
boolean saveToExcel(Customer cst,String excelPath);
我是接口管理员,是设计人员,我觉得这样设计是合理的,可以完成当前的项目需求。那就ok了,写程序就是这样,得先有图纸,然后图纸要评审,评审完成后再交给施工人员去施工。
在这个项目里面,我就是那个设计者,新同事小A是技术落地。
那什么时候需要用到多态呢?我想,应该就是有多人协作,项目比较大的时候,必须要先做好设计!然后,开发人员再根据项目经理写好的接口去做技术实现。
步骤 5 企业现况
“说的不错。”这时候,老板走了过来。
“小白啊,你能悟到这一点,很是难得。没错,多态最核心的意义就是如此,接口的意义就是为了规范开发的代码。”
“那真正的企业里面做项目也有接口管理员吗,是不是也要像这样先做设计?”我激动地问道。
只见老板的脸轻微地抽搐了一下,仿佛想起来各种被烂代码击垮的往事,“这个,小白啊,虽然这样做是最好的。但是很多企业里面,都是以效率优先,也不管到底合不合理,也没有需求和代码评审。都是一个项目分给你,干就完了。”
“......”