面试的一道题 :如何通过面向对像的方式来解决大量的else if语句? 如果某个方法else if 或 case 语句太多,怎样通过面向对像的方法来解决这个问题呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 exmple:class base{ public virtual Test();}class A : base{}class B : base{}class C : base{}//abc分别实现Test.base objA = new A();base objB = new B();base objC = new C();void DoTest( base obj ){ obj.Test();}DoTest( objA );//自动调用A实现的Test(); 按楼上的想法,这个是可以,但是:DoTest( objA );//自动调用A实现的Test();DoTest(..)方法,这个参数在什么情况下用objA,什么情况下用objB,objC,这也是要判断的呀。 cattleknife(解牛刀) ( ) 信誉:100老大,你说的如何解决else if问题呢??调用哪个方法,还是需要用else if吧? 楼主,其实这样的。能不用IF语句尽量不用,使用多态。但有时是不得不用的,假入你一定要判断是哪个OBJ,肯定要用到IF。但是有很多情况下,你是事先就传进一个已知类型的OBJ的,此时如果用多态,就可以不用IF了。 解決大量if else, case語句,多態和重載作不到的.可以用抽象工廠,在創建實例對象的時候通過反射,加載類名創建對象。 那个吃饱了撑了的出的题目?出现大量的if ... else要么是协议约定等太复杂,要么是程序设计有问题,与什么狗屁面向对象的方式有什么关系?面向对象能解决我家上网速度不快线路质量不好的问题么? 引用博客園一位朋友的文章.http://terrylee.cnblogs.com/archive/2005/12/13/295965.aspx Ivony() ( ) 信誉:100 2006-06-14 17:09:00 得分: 0 那个吃饱了撑了的出的题目?出现大量的if ... else要么是协议约定等太复杂,要么是程序设计有问题,与什么狗屁面向对象的方式有什么关系?面向对象能解决我家上网速度不快线路质量不好的问题么? 業務複雜的項目,這個問題是不可避免的. 各位,我是在面试的时候遇到了这个问题,我在回答时,也是用面向对像的方法,如多态来回答。但是这样回答我想是不对的。如果事件知道了业务,按 andy_1027(昊天) ( ) 信誉:100 的回答:楼主,其实这样的。能不用IF语句尽量不用,使用多态。但有时是不得不用的,假入你一定要判断是哪个OBJ,肯定要用到IF。但是有很多情况下,你是事先就传进一个已知类型的OBJ的,此时如果用多态,就可以不用IF了。这样是可以解释的。Kshatriya(何以解忧,惟有杜康) ( ) 信誉:99 的回答是:解決大量if else, case語句,多態和重載作不到的.可以用抽象工廠,在創建實例對象的時候通過反射,加載類名創建對象。我想它的回答是有道理的,但是得请他详细作答一下比较好... 使用反射是个不错的方法。最好能定义一个接口,这样就可以保证调用的函数都是相同的,那么就不用大量if else, case語句了。 应用设计模式中的工厂方法,或者抽象工厂。原理很简单,可以查找一下相关的事例。例:object FACTORY(string type){ return 你要对象}在你引用的地方调用这个方法,输入对应的type就可以了。 请参考策略(P o l i c y)模式定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 今天在网上逛,发现一篇强文,可能这就是面试官想要的回复吧,是JAVA的http://www.jdon.com/artichect/ifelse.htm http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242307设计模式讲解中有详细的讲解,可以下载视频看,也可以下载教程看 为什么DataGridView不能同步更新? 用sql,这个$br$怎么去掉 如何在javascript脚本中获取控件属性的值??? 小菜鸟求助: 导出Oracle的表格至mysql里,有blob格式的数据,datatable很占内存,急:(! 在winform中可以将一个窗体装在另一个窗体里吗? 帮忙修改一下程序哦 C#内这种事务怎么写代码?问题+散分 NHibernate 支持分布式事务吗? 请教各位c#的Windows应用程序开发人员! 超大Bitmap的问题 如何得到窗口坐标 请教关于Enterprise Library的问题
class base{
public virtual Test();
}
class A : base{}
class B : base{}
class C : base{}
//abc分别实现Test.
base objA = new A();
base objB = new B();
base objC = new C();void DoTest( base obj )
{
obj.Test();
}DoTest( objA );//自动调用A实现的Test();
但是:
DoTest( objA );//自动调用A实现的Test();DoTest(..)方法,这个参数在什么情况下用objA,什么情况下用objB,objC,这也是要判断的呀。
调用哪个方法,还是需要用else if吧?
但有时是不得不用的,假入你一定要判断是哪个OBJ,肯定要用到IF。
但是有很多情况下,你是事先就传进一个已知类型的OBJ的,此时如果用多态,就可以不用IF了。
http://terrylee.cnblogs.com/archive/2005/12/13/295965.aspx
那个吃饱了撑了的出的题目?出现大量的if ... else要么是协议约定等太复杂,要么是程序设计有问题,与什么狗屁面向对象的方式有什么关系?面向对象能解决我家上网速度不快线路质量不好的问题么?
業務複雜的項目,這個問題是不可避免的.
如果事件知道了业务,按 andy_1027(昊天) ( ) 信誉:100 的回答:
楼主,其实这样的。能不用IF语句尽量不用,使用多态。
但有时是不得不用的,假入你一定要判断是哪个OBJ,肯定要用到IF。
但是有很多情况下,你是事先就传进一个已知类型的OBJ的,此时如果用多态,就可以不用IF了。
这样是可以解释的。Kshatriya(何以解忧,惟有杜康) ( ) 信誉:99 的回答是:
解決大量if else, case語句,多態和重載作不到的.可以用抽象工廠,在創建實例對象的時候通過反射,加載類名創建對象。我想它的回答是有道理的,但是得请他详细作答一下比较好...
例:
object FACTORY(string type)
{
return 你要对象
}
在你引用的地方调用这个方法,输入对应的type就可以了。
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独
立于使用它的客户而变化。