1.问题的提出
有一家工厂生产的产品Product分为两类,一类是飞机ProductA,一类是汽车ProductB。我们希望在实际生产的过程中由具体的构造器来实例化我们的ProductA和ProductB。
2.设计类图
3.代码实现
首先,我们需要定义一个Product接口,用来表示工厂生产的产品。
{
public void printProduct();
}
由于我们的工厂即生产飞机ProductA又生产汽车ProductB,于是我们让ProductA和ProductB实现Product接口:
1.飞机产品 —— ProductA:
{
public void printProduct()
{
System .out.println( "ProductA" );
}
}
2.汽车产品 —— ProductB:
{
public void printProduct()
{
System .out.println( "ProductB" );
}
}
接下来,我们需要一个构造器 —— 工厂方法,用来构建Product产品:
{
public Product factorymethod();
}
有了产品构造器的接口之后,我们需要分别实现两个类,用来构建ProductA和ProductB:
1.飞机产品构造器 —— ProductCreatorA:
{
public Product factorymethod()
{
return new ProductA();
}
}
2.汽车产品构造器 —— ProductCreatorB:
{
public Product factorymethod()
{
return new ProductB();
}
}
4.客户端实现
我们写一个Client来测试我们的工厂方法:
{
public static void main( String [] args)
{
//定义一个飞机产品构造器
ProductCreator productCreatorA = new ProductCreatorA();
//定义一个汽车产品构造器
ProductCreator productCreatorB = new ProductCreatorB();
//构造飞机产品
Product productA = productCreatorA.factorymethod();
//构造汽车产品
Product productB = productCreatorB.factorymethod();
//控制台输出飞机产品内容
productA.printProduct();
//控制台输出汽车产品内容
productB.printProduct();
}
}
运行结果如下:
5.总结 —— 趣味见解
可见,工厂类不再负责进行对象的构建,而将每个对象的构建任务分配给相应的实现类。也就是说存在一个类,就存在一个相应类的构造器。
通常我请一群朋友去吃麻辣烫,每个人的口味都不一样,我一个跟服务员说的麻烦,我直接用FactoryMethod方法来解决。跟服务员说:“每一个人一份麻辣烫。”至于要什么样的让每个人自己跟服务员说去。