关于用多态取代条件判断(if/swith)得问题?

victorzk 2006-07-07 05:43:55
哪位大侠能否给小弟一段示例代码,让我好好学习一下,谢谢!!
...全文
425 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
victorzk 2006-07-10
  • 打赏
  • 举报
回复
非常感谢以上各位给的各方面指导,我还是有点模糊!
例如以下一段代码: private void test(String a) {
if(a=="one"){
a="a";
}else if(a=="two"){
a="b";
}
}
将以上这段改成多态的形式,也就是不用if判断,改怎么做呢??谢谢诶
synico 2006-07-10
  • 打赏
  • 举报
回复
还是kypfos(不在寻梦) ( ) 信誉:90 的例子好
synico 2006-07-10
  • 打赏
  • 举报
回复
还有,也没看上面的程序用到多态啊
synico 2006-07-10
  • 打赏
  • 举报
回复
这句话中 如果上溯造型时 我不写dodo方法,就无法调用代理类中代理的方法,是不是这就是之所以叫代理模式的原因.请解答.
//------------------->>>>>>>>>>>>>>>>>>>>>
什么地方向上转形了?哪个类是代理类?没看明白,在par里定义的dodo()什么意思,写这个方法的意图感觉怎么那么别扭
Jeremyzhou 2006-07-10
  • 打赏
  • 举报
回复
能力有限
只是用了代理模式
package com.jeremy;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
t.doit();
}
public void doit(){
Par p=new Par("one");
System.out.println(p.dodo());
}
}
class Par{
String para="";
Par par;
String returnValue="";
public Par(){
}
public Par(String s){
para=s;
if(para=="one"){
par=new chi();
}else if(para=="two"){
par=new chi2();
}
}
public String dodo(){
return par.dodo();
}
}
class chi extends Par{
public String dodo(){
return "a";
}
}
class chi2 extends Par{
public String dodo(){
return "b";
}
}

在做这个的时候发现一个问题 大家讨论一下
Par p=new Par("one");
这句话中 如果上溯造型时 我不写dodo方法,就无法调用代理类中代理的方法,是不是这就是之所以叫代理模式的原因.请解答.

smlovetp 2006-07-10
  • 打赏
  • 举报
回复
接分
Yanbin_Q 2006-07-09
  • 打赏
  • 举报
回复
给你一段代码,多态必然以继承为前提

class Parent{
public void foo(){System.out.println("Parent::foo()");}
}

class Child1 extends Parent{
public void foo(){System.out.println("Child1::foo()");}
}

class Child2 extends Parent{
public void foo(){System.out.println("Child2::foo()");}
}

main方法里写成

Parent p1 = new Child1();
Parent p2 = new Child2();

p1.foo();
p2.foo();

看输出结果,并不需要代码判断p1,p2是具体哪一种实例,它就会动态的去调用对应方法

当有人问到你,面向对象有什么特征时,当你从背后的答案中回答有多态时,就一定要想到多态就是这般用法的。

--------------------------------------------------
欢迎访问我的Blog: 隔叶黄莺:The Blog of Unmi http://unmi.blogcn.com
Student02370236 2006-07-09
  • 打赏
  • 举报
回复
上面那样的设计方式也是一种设计模式的简单实现,即组合模式,楼主可以参考一下GOF的这个设计模式...
Student02370236 2006-07-09
  • 打赏
  • 举报
回复
我想不能说是多态取代了if/switch,而是在面向对象这个环境下,多态更好的完成了if/switch的功能.
因为没有现成的代码,我就简单写一下,是一个树型组件的例子:一个树简单地分为分支和叶子,当前结点是一个分支点的时候需要调用分支对象的writer()方法,当前结点是叶子结点的时候要调用叶子对象的writer()方法.同样的方法实现了不同的功能,产生了不同的效果,这就是多态的一个应用.
代码(随便写的,主要突出多态的write方法):
public class Tree{
private Branch[] branchs;

public String write(){
for (int i=0;i<branchs.length;i++){
branchs[i].wirte();
}
}
}

class Branch{
private Leaf[] leafs;

public String write(){
for (int i=0;i<leafs.length;i++){
leafs[i].write();
}
}
}

class Leaf{
private String text="";
private String id="";
private String name="";
private String value="";
...

public String write(){
return ...LeafString...;//LeafString表示在实际树型组件中叶子结点的HTML串
}
}
Student02370236 2006-07-09
  • 打赏
  • 举报
回复
Tree类中的Branch[]表示一个集合,也可以用ArrayList这类数据结构来表示.Branch和Leaf可以继承于同一个接口,这样的话就是把分支看成是一种特殊的Leaf...
鱼鱼 2006-07-09
  • 打赏
  • 举报
回复
int i;
switch(i){
case 1:
break;
case 2:
break;
case 3:
break;
default:
;
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧