论坛首页 Java企业应用论坛

第二个设计模式:工厂方法

浏览 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


 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics