附件1:没有使用工厂模式:修改子类时还得修改客户端
interface Fruit
{
public void eat();
};
class Apple implements Fruit
{
public void eat()
{
System.out.println(\"**吃苹果**\");
}
};
class Orange implements Fruit
{
public void eat()
{
System.out.println(\"**吃橘子**\");
}
};
public class MeiYouShiYong_GongChangMoShi
{
public static void main(String asrgs[])
{
Fruit f=new Apple();
f.eat();
}
};
运行结果:
**吃苹果**
分析:主方法应该就表示一个客户端,主方法的代码越少越好。此时,直接在主方法中指定了要操作的子类(如Fruit f=new Apple()中的Apple),如果要更换子类,则肯定要修改客户端。
附件2:使用工厂模式:修改子类时不用修改客户端
interface Fruit
{
public void eat();
};
class Apple implements Fruit
{
public void eat()
{
System.out.println(\"**吃苹果**\");
}
};
class Orange implements Fruit
{
public void eat()
{
System.out.println(\"**吃橘子**\");
}
};
class Factory
{
public static Fruit getInstance(String className)
{
Fruit f=null;
//此处不要使用className.equals(\"apple\")
//因为:当className为null时,空值不能调用equals(\"apple\")函数
if(\"apple\".equals(className))
{
f=new Apple();
}
if(\"orange\".equals(className))
{
f=new Orange();
}
return f;
}
}
public class ShiYong_GongChangMoShi_WanShan
{
public static void main(String args[])
{
Fruit f=Factory.getInstance(args[0]);
if(f!=null)
{
f.eat();
}
}
};
运行过程及结果:
C:\\Users\\zhuguanjin\\Desktop>javac ShiYong_GongChangMoShi_WanShan.java
C:\\Users\\zhuguanjin\\Desktop>java apple
**吃苹果**
C:\\Users\\zhuguanjin\\Desktop>java orange
**吃橘子**
ShiYong_GongChangMoShi_WanShan
ShiYong_GongChangMoShi_WanShan
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务