首页 > 编程语言 >如何理解面向接口编程与面向实现编程

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

时间:2023-02-25 11:55:05浏览次数:29  
标签:编程 xxx 接口 面向 new 鸭子

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

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

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

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

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

 

标签:编程,xxx,接口,面向,new,鸭子
From: https://www.cnblogs.com/Arnold-Zhang/p/17154085.html

相关文章

  • Windows黑客编程之Bypass UAC
    描述用管理员权限运行CompMgmtLauncher.exe,由于它是白名单程序,不会被UAC拦截,可以直接以管理员权限运行CompMgmtLauncher的功能是去遍历指定注册表路径下的程序,并启动只......
  • Windows黑客编程之提升进程令牌权限
    描述利用AdjustTokenPrivileges提升进程的令牌访问权限代码外层调用#include"stdafx.h"#include"AdjustToken.h"int_tmain(intargc,_TCHAR*argv[]){ if(......
  • 基于springboot的restful接口的请求地址含有特殊字符被项目自带tomcat拦截问题
    写了一个基于springboot的restful接口,但按照设计,请求地址十分古怪,类似这样:http://192.168.10.8:8080/?skey=fb5e8ea9249c4ac19dad5e2a341e09ce&filter[]=A3011300500,eq,350......
  • 设计模式(十五)-面向对象概念
    一、设计原则1、单一职责:设计目的单一的类。2、开放-封闭原则:对扩展开放,对修改关闭。3、里氏替换原则:子类可代替父类。4、依赖倒置:要依赖与接口,而不是具体实现,针对接口编程......
  • Postman接口测试
    一、Cookie鉴权接口鉴权,接口加密,接口签名(金融项目,银行项目,信贷项目,特大型项目)1、什么是cookie?cookie本质是一段文本,客户端第一次访问服务器时,服务器不知道客户端身份,所......
  • linux shell编程中的数组
     001、普通数组普通数组的定义: ay=(100200300"aa""bb")##直接定义 [root@PC1test]#ay2[0]=800##单独定义每一个元素[root@PC......
  • Windows黑客编程之内存直接加载运行
    描述编写一款PE加载器,用来将dll和exe文件加载到内存中并运行假设程序需要动态调用dll,内存加载运行技术可以把这些dll作为资源插入自己的程序中,直接在内存中运行即可,不必......
  • linux shell编程中 case语句
     001、[root@PC1test]#lstest.sh[root@PC1test]#cattest.sh##测试脚本#!/bin/bashread-p"pleaseinputancharacter:"key......
  • 2022秋招-京东-数据分析师笔试-编程题
    题目一题目描述有若干个数形成一个可重集合,它们中很多都想做一个中庸的数,即既不是集合中最大的(或之一),也不是集合中最小的(或之一)。显然,不可能满足所有数。好在还是有一些......
  • day02-面向对象高级2-接口&多态
    1,final关键字1,认识finalfinal关键字最终的意思,可以用来修饰(类,方法,变量)特点:修饰类类不能被继承修饰方法,方法不能被子类重写修饰变量,该变量只能被赋值一次final修......