上一节中已经介绍了简单工厂,我想大家应该有一定认识了。然后简单工厂有它自身的局限性
~
今天继续为大家介绍工厂模式之工厂方法
.
UML
示意图:
组成部分:
1.
抽象工厂
2.
具体工厂
3.
抽象产品
4.
具体产品
代码例子:
1.
抽象工厂
package
com.eekq.creator.factorymethod;
public
interface
IFactory {
//抽象工厂,工厂方法
public
IProduct factory();
}
2.
抽象产品
package
com.eekq.creator.factorymethod;
public
interface
IProduct {
//抽象产品,抽象方法
public
void
print();
}
3.
具体产品:可以有N个同类产品,在这里我以两个产品为例
产品1
package
com.eekq.creator.factorymethod;
public
class
Product1
implements
IProduct {
public
void
print() {
//
TODO
自动生成方法存根
//示例方法
System.
out
.println(
"Product1.print()"
);
}
}
产品2
package
com.eekq.creator.factorymethod;
public
class
Product2
implements
IProduct {
public
void
print() {
//
TODO
自动生成方法存根
System.
out
.println(
"Product2.print()"
);
}
}
4.
具体工厂:针对具体产品的具体工厂,有N类产个产品就有N个具体工厂
工厂1
package
com.eekq.creator.factorymethod;
public
class
Factory1
implements
IFactory {
public
IProduct factory() {
//
TODO
自动生成方法存根
return
new
Product1();
}
}
工厂2
package
com.eekq.creator.factorymethod;
public
class
Factory2
implements
IFactory{
public
IProduct factory() {
//
TODO
自动生成方法存根
return
new
Product2();
}
}
5.
客户端的调用
package
com.eekq.creator.factorymethod;
public
class
Main {
/**
*
@param
args
*/
public
static
void
main(String[] args) {
//
TODO
自动生成方法存根
//工厂方法示例
IFactory factory =
new
Factory1();
IProduct product1 = factory.factory();
//获取工厂1
product1.print();
//执行具体产品功能
IFactory factory2 =
new
Factory2();
IProduct product2 = factory2.factory();
//获取工厂1
product2.print();
//执行具体产品功能
}
}
6.
输出结果
Product1.print()
Product2.print()
7.
总结
工厂方法模式保持了简单工厂的优点,同时克服了简单工厂的缺点。工厂方法的核心在于抽象工厂,这样如果有新的产品加入,就实现抽象工厂就可以了。这也具有了可扩展性,同时也满足了‘开-闭’原则
作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552