面试的一道题 :如何通过面向对像的方式来解决大量的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设计模式讲解中有详细的讲解,可以下载视频看,也可以下载教程看 委托事件 BackgroundWorker到底怎么才能停下来。。。 求一正则表达式 求ajax提交表单 简单方式 C#写SQL SERVER 2005函数为什么不能访问数据库啊 急,实在搞不懂连接数据库哪里出错了,哪位老大帮忙看看,第一次学会给分 C# 怎么连接MYSQL数据库 想问一个windows api的问题 调用C++写的DLL之后,MessageBos异常!请高手们指教啊 C#Datagridview如何根据下拉表选择的内容 改变Datagridview显示的内容 如何得到窗口坐标 请教关于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就可以了。
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独
立于使用它的客户而变化。