博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

流水孟春

以前使用的博客 webvista.cublog.cn
lib.cublog.cn
工厂模式

工厂模式是J2EE核心模式中较简单的一种,听说Jive论坛中对数种设计模式有着广泛的应用,工厂模式也包括其中,本人就从该模式起步,希望有一天能对各种设计模式运用自如。

现给出一简单用例,模拟一火腿(Ham)生产工厂,工厂可以生产数种类型的Ham,那么在创建了一个工厂实例后,只需要告诉它请你生产何种Ham,它就会给你生产出来:

package test;

interface Ham {
//定义接口,用于辅助实现工厂模式

    void show();
//由Ham工厂生产出的各种Ham将有show()的能力

}
public class FatoryModule {
//工厂类,用于产品多种不同种类的Ham

    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) {
//测试代码

        FatoryModule fatorymodule = new FatoryModule();
    try {
        Ham myHam = fatorymodule.getHam("HamB");
//可以方便地创建各种类型的Ham,而程序结构和代码的修改量达到最小

        myHam.show();
    } catch (Exception ex) {
        ex.printStackTrace();
//应进一步处理异常

    }
    }
}

class HamA implements Ham {
//工厂中生产的一种产品HamA

    public void show() {
        System.out.println("You got a HamA.");
    }
}

class HamB implements Ham {
//工厂生产的另一种产品HamB

    public void show() {
        System.out.println("You got a HamB.");
    }
}

class HamC implements Ham {
//工厂生产的第三种产品HamC

    public void show() {
        System.out.println("You got a HamC.");
    }
}

        通过程序的演示我得到了以下结论:

        由于应用了工厂模式,我只需要告诉工厂对象给我生产一种什么样的Ham(即getHam()方法中的参数),便可以得到此类Ham,而不用写HamX  hamX=new HamX(); 要是有数十种不同的Ham对象需要在程序的不同地方被创建,那么使用工厂模式代码将显得简单而统一,每个需要不同Ham的地方仅是getHam()的参数不同。否则程序一旦需要扩展和维护,数十处的new语句将让人头痛。而如果需要添加新的Ham类型,只需要在工厂类中添加即可。
       
我还这样理解:如果说每种Ham对象的创建都是一条生产线,那么我们用一个工厂将多个生产线封装起来了,从而用户就好比只与工厂传达室的人打交道,告诉他请你们工厂生产一种什么产品,而不是与每一条生产线打交道--这样说来当然是有好处的。
       
敬请各位发表评论:)

发表于: 2007-01-25,修改于: 2007-01-25 11:58,已浏览386次,有评论0条 推荐 投诉

给我留言
版权所有 ChinaUnix.net 页面生成时间:0.01034