对接口的一点疑问,请各位高手帮忙解决啊

问题描述

今天看了一个跟接口有关的例子针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求.举个例子:某公司有一台特殊打印机,还可以使用一年,一年后可能换为另一种打印机,这两种打印机都特殊而贵.所以现在的程序希望换了打印机后也少量修改就可用.方法:1,定义一个打印机接口.2,定义打印机类A,B,分别实现此接口.3,定义一个工厂类,在类中可选择返回由A实现的接口,或者由B实现的接口.4,在程序中使用打印机时,就可以使用工厂类来调用打印机,而不需要知道具体的是什么打印机.如果打印机换了,只需要修改工厂类就行了.如果有一千个地方都调用过打印机,就不需要一个一个修改.修改一个地方就行了.接口充当一个隔离层的作用.在面向对象的设计中,接口的作用非常重要,//定义打印机接口interfaceIprint{boolPrintData(stringdata);}//定义打印机类A,实现接口classPrintA:Iprint{publicvirtualboolPrintData(stringdata)...{//具体业务逻辑略}}定义打印机类B,实现接口classPrintB:Iprint{publicvirtualboolPrintData(stringdata)...{//具体业务逻辑略}}//定义工厂类classPrintFactory{publicIprintCreatePrint(){//返回一个由打机类A,或B实现的接口,比如returnnewPrintA();}}//通过工厂类,调用打印机privatevoidbutton1_Click(objectsender,EventArgse){PrintFactorymyFactory=newPrintFactory();IprintmyPrint=myFactory.CreatePrint();myPrint.PrintData("这样做很方便啊");}我自己将上面的例子改了一下,我觉得更好classPrintA{publicboolPrintData(stringdata){//具体业务逻辑略}}classPrintB{publicboolPrintData(stringdata){//具体业务逻辑略}}//定义工厂类classPrintFactory{publicboolCreatePrint(stringdata){PrintAaa=newPrintA();returnaa.PrintData(stringdata);}//通过工厂类,调用打印机privatevoidbutton1_Click(objectsender,EventArgse)...{PrintFactorymyFactory=newPrintFactory();myFactory.CreatePrint("这样做很方便啊");}从上面的例子中,我自己觉得我自己做的不用接口还更好一点啊。更加方便一点啊。请问各位高手,接口在实际运用中的到底有什么作用,能不能用这个例子,来说明一下呢?我看过一些例子,但都是对怎么定义接口和怎么用接口的说明,我想知道接口在使用中到底有什么好处。

解决方案

解决方案二:
学习学习学习学习学习学习
解决方案三:
回帖是一种美德!传说每天回帖即可获得10分可用分!连续两周技术区参与者,每周额外可以获得88个可用分小技巧:教你如何更快获得可用分
解决方案四:
看看设计模式的规则你就明白了,工厂的责任和打印机的责任不同,不能把打印的责任交给工厂。这叫责任分离
解决方案五:
引用3楼shoushii的回复:

看看设计模式的规则你就明白了,工厂的责任和打印机的责任不同,不能把打印的责任交给工厂。这叫责任分离

嗯,尤其是设计模式前面的那几个原则。
解决方案六:
引用楼主weixing06的帖子:

classPrintFactory{publicboolCreatePrint(stringdata){PrintAaa=newPrintA();returnaa.PrintData(stringdata);}

实例化一个打印机的时候就必须给出data参数才能实例化?并且“默认”打印了?你自己“觉得更好”,但是你肯定没有想得稍微远一点。实例化就是实例化,我宁愿“笨”一点。否则,反而弄巧成拙。
解决方案七:
引用楼主weixing06的帖子:

接口在实际运用中的到底有什么作用,能不能用这个例子,来说明一下呢?我看过一些例子,但都是对怎么定义接口和怎么用接口的说明,我想知道接口在使用中到底有什么好处。

举一个例子。你可以创建一个“电话机”类,然后有一天你想明白了一个创造,于是可以让你自己发明的电话机操作系统实现IPrint接口,于是你就发明了传真机。
解决方案八:
顺便说一下,“设计模式”的“原则”是很宽泛的,它想把什么都包括,就像“吃维生素治百病”一样。一般来说,模式只是你经验的后期结果,前期你会对模式胡乱使用。因此,暂时忘记模式,多多深入编程细节更重要。
解决方案九:
引用3楼shoushii的回复:

看看设计模式的规则你就明白了,工厂的责任和打印机的责任不同,不能把打印的责任交给工厂。这叫责任分离

引用5楼sp1234的回复:

引用楼主weixing06的帖子:classPrintFactory{publicboolCreatePrint(stringdata){PrintAaa=newPrintA();returnaa.PrintData(stringdata);}实例化一个打印机的时候就必须给出data参数才能实例化?并且“默认”打印了?你自己“觉得更好”,但是你肯定没有想得稍微远一点。实例化就是实例化,我宁愿“笨”一点。否则,反而弄巧…

工厂制造打印机...不负责打印...面向对象要站在对象的立场上想问题而不是站在你自己的立场上去要求对象替你着想...
解决方案十:
其实GOF设计模式并没有去明确地去首先研究“责任”问题,他基本上是就事论事地研究编程问题,因此很容易被人误解为“以方便编写代码为目的的技术”。只有后来又看了GOF之后很多年出现的书籍的人,反过来把“职责”加入“模式”,努力想把设计模式提高为系统分析技巧的高度,好像设计模式中已经说明了系统分析的技术了。其实,我认为GOF的设计模式值应该作为编程经验总结,而非系统分析和设计的入门。
解决方案十一:
其实,许多人都不赞成不了解OO的人去先去看“设计模式”,大多数“过来人”都知道“应该学好OOAD”,用关于职责等类似的知识作为设计工具,而不是首先去学“设计模式”。
解决方案十二:
楼主的认识感觉太专注于,你看到的例子了,你看到的例子中,打印机只有一个printdata,而如果我还有一个ChangePaper呢,按你的做法,你的工厂类也就不是工厂类了,你的工厂类将与你的App高度耦合
解决方案十三:
引用10楼sp1234的回复:

其实,许多人都不赞成不了解OO的人去先去看“设计模式”,大多数“过来人”都知道“应该学好OOAD”,用关于职责等类似的知识作为设计工具,而不是首先去学“设计模式”。

支持
解决方案十四:
设计模式更有用应该是属于交流时的对细节的封装。比如有一个接口有一个方法叫排兵布阵,福拉多类实现了这个接口,在指挥中国队。后来足协想用别人dll中的杜伊类的排兵布阵,但它没有实现接口,那么足协对你的要求就应该是:为接口和杜伊类做一个适配器。简单一句话,你就知道怎么去做代码了。
解决方案十五:
面向对象啊

时间: 2024-08-01 09:38:03

对接口的一点疑问,请各位高手帮忙解决啊的相关文章

ajaxpro 验证出现的一点问题,比较奇怪,请各位高手帮忙解决

问题描述 这个是代码<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="ajaxtest.aspx.cs"Inherits="ajaxtest"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xh

终端回车不能换行-Linux 系统裁剪之后 终端登录问题!请Linux高手帮忙解决一下!

问题描述 Linux 系统裁剪之后 终端登录问题!请Linux高手帮忙解决一下! 10C 最近裁了一个linux系统 最后能正常启动和运行,唯独的一点遗憾就是tty1 这个终端不能用!以下的不正常信息,在其它tty[2-6]都正常.当登录上tty1之后输入的内容都不会显示!假如输入错误的命令后,回车会显示命令找不到并且会换行!如果直接输入回车,也不能换行,是怎么回事儿? 解决方案 http://blog.csdn.net/ssmile/article/details/8239612

求助,请各位高手帮忙解决一个问题

问题描述 各位前辈,小弟再做毕业设计,写代码时遇到了一点问题,希望各位前辈帮忙解决一下.结合病人在等待时间.队列长度.患者类型的本身优先级共同确定患者的就诊优先级为:fi=a1*ti+a2*βi+a3*si(3.1)由相应的权重和其它因素确定:第1项表示患者就诊的优先级与排队时间的长短有关.其中:ti为某病人已经在队列中的时间:a1为该病人等待时间的优先权重,这一项表明,患者在队列里的时间越长的患者应优先接受服务,相当的就诊序列会适当提前.第二项表示患者就诊的优先级与该类患者在队列中的比例有有关

访问文件出现的错误,请各位高手帮忙解决一下

问题描述 "/oaum"应用程序中的服务器错误.--------------------------------------------------------------------------------运行时错误说明:服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因).但可以通过在本地服务器计算机上运行的浏览器查看.详细信息:若要使他人能够在远程计算机上查看此特定错误信息的详细信息,请在位于当前Web应用程序根目录下的&qu

请各位高手帮忙解决一个求和函数问题,在线等,十分着急!请各位前辈指点!

问题描述 [align=left]有表格如下图,切表格中的数据均都为数字,除第一列为汉字之外,如何写个函数可以使每行每列的数据相加,如下图最后一行为上数字之和,如何能写个活函数,就是可以计算第一行到第三行的数据的和也可以计算第三行到第五行的和,也可以计算第二行到第五行的数据的和!-------------------------------------------|200|100|200|300|400|200|100|第一行-----------------------------------

一个C#小问题 请那位高手帮忙解决 谢谢

问题描述 intx;PublicVector(Vectorrhs){x=rhs.x;//这俩个数不是同一个数吗?Vector是一个类名,这有什么左右呢}非常抱歉没分了 解决方案 解决方案二:我也是菜鸟.但是你这个函数是拷贝构造函数吧.那么x和rhs.x当然不是一个x了...当你vectorp=newvector:....vectorp2(p):这样p2.x=p.x了,使用的就是这个拷贝构造函数.解决方案三:这个构造用一个Vector类型的实例去实例化另一个Vector类型的实力PublicVec

webservice里自定义类的问题,请各位高手帮忙解决!

问题描述 我在webservices里定义了2个类publicclassSpecialProduct{privatestringName;publicstringfieldName{get{returnName;}set{Name=value;}}privatestringValue;publicstringfieldValue{get{returnValue;}set{Value=value;}}}publicclassOrderRequestType//定购请求{privateSpecial

javaweb ssi框架-请各位高手帮忙解答,谢谢。

问题描述 请各位高手帮忙解答,谢谢. 做一个点菜系统,当在页面中选择checkedbox(就是菜品)并提交,此时需要在后台记录菜品选中次数加1 解决方案 你这种提问方式完全是无效的.好比你在设计一座大楼,什么都不知道,你现在问电梯按在哪里,这怎么回答呢?你这个完整的系统谁知道哪是哪,又怎么知道你哪里什么东西怎么+1,如果系统完全不是你开发的,建议你问现有代码的开发者, 解决方案二: 菜品次数是在数据库中吗?

231-用VS08来使用C语言发生的错误,请各位高手帮忙

问题描述 用VS08来使用C语言发生的错误,请各位高手帮忙 #include #define N 3 struct stu { int num; char name[20]; int score[4]; } void main( ) { int i,k; struct stu s[N]; for(i=0;i<N;i++) { scanf("%d%s%d%d%d",&(s[i].num),s[i].name,&(s[i].score[0]),&(s[i].s