如何理解面向接口编程与面向实现编程

以Head First中的一张图为例,说明这个问题:

假设我们有一个应用程序加simuduck, 用户可以执行simuduck -p xxx, 其中xxx是鸭子的类型,然后程序会根据用户的输入生成不同的鸭子并显示出来;

那么程序在设计时,我们分两部分,一部分是专门写了一个鸭子类库,提供一个头文件,里面声明多种鸭子的类型,另外一部分在main.cpp中,根据用户传入的参数,创建不同种类的鸭子;这显然就会带来上图所示的一个问题,当有新增鸭子类型的需求时,这两部分都要跟着修改,if else会变得越来越冗长;

那么问题出在哪里呢?就在我们始终要根据传参去new 对应type的鸭子,这就是妥妥的面向实现编程,new的时候,不同类型的鸭子还可能会有不同的构造参数;main.cpp这部分太容易变化了,我们需要识别出来,这部分要做的事情就是创建对象,我们把这部分代码独立出来,放到一个新的类中,这个类的职责就是创建对象,这个类就叫工厂类;用DuckFactory的createDuck(string ducktype) 来创建鸭子就是面向接口编程而非面向实现编程;

这么做还有一个好处,那就是别的项目可以直接复用这段代码,来做另外的事情,比如烤鸭店,可以复用这段代码生成原材料图片,展示给客户;

 

posted on 2023-02-25 11:49  疾速瓜牛  阅读(32)  评论(0编辑  收藏  举报

导航