浏览 2787 次
锁定老帖子 主题:第二个设计模式:工厂方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-06
上一节中已经介绍了简单工厂,我想大家应该有一定认识了。然后简单工厂有它自身的局限性~今天继续为大家介绍工厂模式之工厂方法 .
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 {
/**
*@paramargs
*/
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
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |