针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求.   
      举个例子:某公司有一台特殊打印机,还可以使用一年,一年后可能换为另一种打印机,这两种打印机都特殊而贵.所以现在的程序希望换了打印机后也少量修改就可用.   
    方法:   
    1,定义一个打印机接口.   
    2,定义打印机类A,B,分别实现此接口.   
    3,定义一个工厂类,在类中可选择返回由A实现的接口,或者由B实现的接口.   
    4,在程序中使用打印机时,就可以使用工厂类来调用打印机,而不需要知道具体的是什么打印机.   
        如果打印机换了,只需要修改工厂类就行了.如果有一千个地方都调用过打印机,就不需要一个一个修改.修改一个地方就行了.接口充当一个隔离层的作用.

代码如下:

  private   void     button1_Click(object     sender,EventArgs     e){  
        PrintFactory     myFactory=new     PrintFactory();  
        Iprint     myPrint=myFactory.CreatePrint("PrintA");  
        myPrint.PrintData("这样做很方便啊");  
    }

请编写步骤1,2,3,中所述的接口IPrint,类PrintA,类PrintB,类PrintFactory。

//定义打印机接口  
  interface     Iprint{  
      bool     PrintData(string     data);  
    }  
   
  //定义打印机类A,实现接口  
  class     PrintA:Iprint{  
      public   virtual   bool     PrintData(string     data){  
          //具体业务逻辑略  
        }  
    }  
   
    定义打印机类B,实现接口  
  class     PrintB:Iprint{  
      public   virtual   bool     PrintData(string     data){  
          //具体业务逻辑略  
        }  
    }  
   
  //定义工厂类  
  class     PrintFactory{  
      public     Iprint     CreatePrint(){  
        //返回一个由打机类A,或B实现的接口,比如  
          return   new     PrintA();  
        }  
    }  
   
  //通过工厂类,调用打印机  
  private   void     button1_Click(object     sender,EventArgs     e){  
        PrintFactory     myFactory=new     PrintFactory();  
        Iprint     myPrint=myFactory.CreatePrint();  
        myPrint.PrintData("这样做很方便啊");  
    }

针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求. 某公司...打印机...(笔试中遇到的题目)的更多相关文章

  1. 对“针对接口编程,而不是针对实现编程”的理解

    今天在阅读<Head First设计模式>的时候,看到了这句话:"针对接口编程,而不是针对实现编程",第一次见到的时候,不太清楚作者想表达的意思,想着到后来看看实例就懂 ...

  2. ZT 针对接口编程而不是针对实现编程

    java中继承用extends 实现接口用 implements 针对接口编程而不是针对实现编程 2009-01-08 10:23 zhangrun_gz | 分类:其他编程语言 老听说这句,不知道到 ...

  3. 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  4. Java面向对象7大设计原则

    目录 单一职责原则 SRP 开闭原则 OCP 里氏替换原则 LSP 依赖倒置原则 DIP 接口隔离原则 ISP 组合复用原则 CRP 迪米特法则 LOD 单一职责原则 SRP 一个类只有一个引起修改变 ...

  5. 面向对象程序的设计原则--Head First 设计模式笔记

    一.找出应用中可能需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起. 把会变化的部分取出并“封装”起来,好让其他部分不会受到影响.这样,代码变化引起的不经意后果变少,系统变得更有弹性 ...

  6. Java面向对象编程 第一章 面向对象开发方法概述

    一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...

  7. 【GoLang】golang 面向对象编程 & 面向接口编程

    005.面向对象&接口编程 1 面向函数编程 1.1 将数据作为参数传递到函数入参 1.2 对象与函数是分离的 2 面向对象编程 2.1 使用者看起来函数作为对象的属性而非参数 2.2 函数属 ...

  8. 蓝牙防丢器原理、实现与Android BLE接口编程

    本文是对已实现的蓝牙防丢器项目的总结,阐述蓝牙防丢器的原理.实现与android客户端的蓝牙BLE接口编程.在这里重点关注如何利用BLE接口来进行工程实现,对于BLE的协议.涉及到JNI的BLE接口内 ...

  9. javascript设计模式学习之十七——程序设计原则与面向接口编程

    一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...

随机推荐

  1. Unity中AndroidManifest增加权限,打开应用时不弹出权限申请

    一 屏蔽第一次打开apk时权限弹窗: 在Activity下添加<meta-data android:name="unityplayer.SkipPermissionsDialog&qu ...

  2. Fundebug前端异常监控插件更新至 1.9.0,支持监控 HTTP 慢请求

    摘要: 1.9.0新增 httpTimeout 配置选项,支持监控 HTTP 慢请求,同时修复了记录的 HTTP 响应时间偏小的 BUG. Fundebug提供专业的前端异常监控服务,可以第一时间捕获 ...

  3. Django 简单的验证码

    创建一个 Django 项目:yanzhengma 和 应用 app01 修改 urls.py 文件 from django.contrib import admin from django.urls ...

  4. flask那些事(一)

    flask配置文件 flask路由系统 @app.route() 装饰器中的参数 如果不明白装饰器 点击这里 methods : 当前 url 地址,允许访问的请求方式 @app.route(&quo ...

  5. nacos 实现同机器上启动三个服务

    1.我们要在单台服务器上启动多个nacos实例,保证三个不同的端口,我们可以通过修改启动脚本: 打开启动脚本找到:export FUNCTION_MODE="all"    这一行 ...

  6. 无法解析的外部符号 "void __cdecl cv::imshow

    解决方法: 把编译环境放到其他没有报错的项目上,编译通过.

  7. luoguP1195 口袋的天空

    生成树一 题目描述 给你云朵的个数NN,再给你MM个关系,表示哪些云朵可以连在一起. 现在小杉要把所有云朵连成KK个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小. 链接 分析 ...

  8. windows 7系统下查看被占用的端口并解除占用

    运行输入cmd,在命令行输入 netstat -ano 查找所占用端口所在的行,如图本例子被占用端口为9999,记住对应的pid 然后输入 tasklist|findstr pid(此处为9528) ...

  9. 201871010105-曹玉中《面向对象程序设计(java)》第十四周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  10. appium连接genymation运行计算器的例子

    #coding=utf-8from appium import webdriverdesired_caps={}desired_caps["platformName"]=" ...