简单工厂模式(Simple Factory)
2006-04-13 23:40
274 查看
简单工厂模式(Simple Factory)
工厂模式是J2EE核心模式中较简单的一种,听说Jive论坛中对数种设计模式有着广泛的应用,工厂模式也包括其中,本人就从该模式起步,希望有一天能对各种设计模式运用自如。
现给出一简单用例,模拟一火腿(Ham)生产工厂,工厂可以生产数种类型的Ham,那么在创建了一个工厂实例后,只需要告诉它请你生产何种Ham,它就会给你生产出来:
****************************Ham接口*****************************
package HamFactory;
//定义接口,用于辅助实现工厂模式
public interface Ham {
void show(); //由Ham工厂生产出的各种Ham将有show()的能力
}
***************************工厂类******************************
package HamFactory;
//工厂类,用于产品多种不同种类的Ham
public class HamFatoryModule
{
public Ham getHam(String HamType) throws Exception{//工厂类对象生产Ham的动作
if (HamType.equals("HamA")) {
return new HamA();
}
else if (HamType.equals("HamB")) {
return new HamB();
}
else if (HamType.equals("HamC")) {
return new HamC();
}
else
throw new Exception();//如果该工厂收到生产某种Ham的指令但暂不支持,则抛出异常
}
public static void main(String[] args)
{//测试代码
HamFatoryModule hamfatory = new HamFatoryModule();
try
{
//接口本身是不能实例化的,但是可以通过子类来构造一个对象
Ham myHam = hamfatory.getHam("HamB");//可以方便地创建各种类型的Ham,而程序结构和代码的修改量达到最小
myHam.show();
} catch (Exception ex)
{
ex.printStackTrace();//应进一步处理异常
}
}
}
***************************实现类******************************
package HamFactory;
//工厂中生产的一种产品HamA
public class HamA implements Ham {
public void show()
{
System.out.println("You got a HamA.");
}
}
package HamFactory;
//工厂中生产的一种产品HamB
public class HamB implements Ham {
public void show()
{
System.out.println("You got a HamB.");
}
}
package HamFactory;
//工厂中生产的一种产品HamC
public class HamC implements Ham {
public void show()
{
System.out.println("You got a HamC.");
}
}
通过程序的演示我得到了以下结论:
由于应用了工厂模式,我只需要告诉工厂对象给我生产一种什么样的Ham(即getHam()方法中的参数),便可以得到此类Ham,而不用写HamX hamX=new HamX(); 要是有数十种不同的Ham对象需要在程序的不同地方被创建,那么使用工厂模式代码将显得简单而统一,每个需要不同Ham的地方仅是getHam()的参数不同。否则程序一旦需要扩展和维护,数十处的new语句将让人头痛。而如果需要添加新的Ham类型,只需要在工厂类中添加即可。
我还这样理解:如果说每种Ham对象的创建都是一条生产线,那么我们用一个工厂将多个生产线封装起来了,从而用户就好比只与工厂传达室的人打交道,告诉他请你们工厂生产一种什么产品,而不是与每一条生产线打交道--这样说来当然是有好处的。
工厂模式是J2EE核心模式中较简单的一种,听说Jive论坛中对数种设计模式有着广泛的应用,工厂模式也包括其中,本人就从该模式起步,希望有一天能对各种设计模式运用自如。
现给出一简单用例,模拟一火腿(Ham)生产工厂,工厂可以生产数种类型的Ham,那么在创建了一个工厂实例后,只需要告诉它请你生产何种Ham,它就会给你生产出来:
****************************Ham接口*****************************
package HamFactory;
//定义接口,用于辅助实现工厂模式
public interface Ham {
void show(); //由Ham工厂生产出的各种Ham将有show()的能力
}
***************************工厂类******************************
package HamFactory;
//工厂类,用于产品多种不同种类的Ham
public class HamFatoryModule
{
public Ham getHam(String HamType) throws Exception{//工厂类对象生产Ham的动作
if (HamType.equals("HamA")) {
return new HamA();
}
else if (HamType.equals("HamB")) {
return new HamB();
}
else if (HamType.equals("HamC")) {
return new HamC();
}
else
throw new Exception();//如果该工厂收到生产某种Ham的指令但暂不支持,则抛出异常
}
public static void main(String[] args)
{//测试代码
HamFatoryModule hamfatory = new HamFatoryModule();
try
{
//接口本身是不能实例化的,但是可以通过子类来构造一个对象
Ham myHam = hamfatory.getHam("HamB");//可以方便地创建各种类型的Ham,而程序结构和代码的修改量达到最小
myHam.show();
} catch (Exception ex)
{
ex.printStackTrace();//应进一步处理异常
}
}
}
***************************实现类******************************
package HamFactory;
//工厂中生产的一种产品HamA
public class HamA implements Ham {
public void show()
{
System.out.println("You got a HamA.");
}
}
package HamFactory;
//工厂中生产的一种产品HamB
public class HamB implements Ham {
public void show()
{
System.out.println("You got a HamB.");
}
}
package HamFactory;
//工厂中生产的一种产品HamC
public class HamC implements Ham {
public void show()
{
System.out.println("You got a HamC.");
}
}
通过程序的演示我得到了以下结论:
由于应用了工厂模式,我只需要告诉工厂对象给我生产一种什么样的Ham(即getHam()方法中的参数),便可以得到此类Ham,而不用写HamX hamX=new HamX(); 要是有数十种不同的Ham对象需要在程序的不同地方被创建,那么使用工厂模式代码将显得简单而统一,每个需要不同Ham的地方仅是getHam()的参数不同。否则程序一旦需要扩展和维护,数十处的new语句将让人头痛。而如果需要添加新的Ham类型,只需要在工厂类中添加即可。
我还这样理解:如果说每种Ham对象的创建都是一条生产线,那么我们用一个工厂将多个生产线封装起来了,从而用户就好比只与工厂传达室的人打交道,告诉他请你们工厂生产一种什么产品,而不是与每一条生产线打交道--这样说来当然是有好处的。
相关文章推荐
- 设计模式笔记之工厂模式--简单工厂模式(Simple Factory Pattern)
- 设计模式(Design Pattern)之简单工厂模式(Simple Factory Pattern)
- 设计模式学习笔记一:Simple factory pattern,简单工厂模式
- PHP简单工厂模式(simple factory)趣味讲解
- 简单工厂模式(SimpleFactory Pattern)
- 简单工厂模式(Simple Factory) vs 工厂方法模式(Factory Method)
- 软件设计模式——简单工厂模式(Simple Factory)
- 简单工厂模式(simpleFactory pattern)(披萨)
- 简单工厂模式(Simple Factory)
- 简单工厂模式(simple factory )
- 简单工厂模式(SimpleFactoryPattern)
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 简单工厂模式(Simple Factory Pattern(静态工厂方法模式)对象创建型模式)
- Java设计模式--简单工厂模式【Simple Factory Pattern】
- JAVA设计模式之 简单工厂模式【Simple Factory Pattern】
- 简单工厂模式(Simple Factory Pattern(静态工厂方法模式)对象创建型模式)
- 1.简单工厂模式( Simple Factory Pattern )
- 设计模式——简单工厂模式(simple factory pattern)
- c++设计模式:简单工厂模式(Simple Factory Pattern)