国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > 设计模式――简单工厂模式

设计模式――简单工厂模式

来源:程序员人生   发布时间:2015-03-28 08:34:33 阅读次数:3021次

场景设置

我想养1些小动物,把他们圈养在1起看着他们长大,我选择猫,狗,羊,鸡这4种动物。

1般思想,不过建立4个动物类,实例化便可,以下:

class Dog{ public void shout(){ System.out.prinltn("dog shout"); } } class Cat{ public void shout(){ System.out.prinltn("cat shout"); } } class Chicken{ public void shout(){ System.out.prinltn("chicken shout"); } } class Goat{ public void shout(){ System.out.prinltn("goat shout"); } } public static void main(String[] args){ Dog dog = new Dog(); Cat cat = new Cat(); Goat goat = new Goat(); Chicken chicken = new Chicken(); }

如上面这个写法,4个动物已很麻烦,在客户端main中要进行4次实例化,如果我开个动物园,实例化的语句怎样办呢?总不能有多少动物就写多少动物吧。如果我圈养10几只动物,每天豢养他们,毫无疑问上述的客户端会变得杂乱不堪。
这样就引出了简单工厂模式。

interface Animale{ public abstract void shout(); } class Goat implements Animale{ @Override public void shout() { System.out.println("goat shout"); } } class Chicken implements Animale{ @Override public void shout() { System.out.println("chicken shout"); } } class Dog implements Animale{ @Override public void shout() { System.out.println("dog shout"); } } class Cat implements Animale{ @Override public void shout() { System.out.println("cat shout"); } } class AnimalFactory{ public static Animale getAnimale(int kind){ Animale animale = null; switch(kind){ case 0: animale = new Dog(); break; case 1: animale = new Cat(); break; default: animale = null; } return animale; } }

因此客户端可以这样处理这么1大群动物:

public static void main(String[] args){ List<Animale> zoo = new ArrayList<Animale>(); for(int i=0;i<4;i++) zoo.add(AnimalFactory.getAnimale(0)); for(int i=0;i<2;i++) zoo.add(AnimalFactory.getAnimale(1)); for(int i=0;i<4;i++) zoo.add(AnimalFactory.getAnimale(2)); for(int i=0;i<2;i++) zoo.add(AnimalFactory.getAnimale(3)); for(Animale animale:zoo){ //animale.... } }

通过简单工厂模式,我可以圈养大批动物,在开饭的时候可以1起喂食,睡觉的时候可以1起要求睡觉等等。

这就是简单工厂模式,让类似的对象来自于同1个抽象的东西,通过工厂类,生产这些对象,而在操作这些对象的时候又可使用它们的父类统1操作。固然,生产甚么样的对象还是需要客户端来决定。
不足的地方在于,每增加1个新的物种,都需要修改AnimalFactory这个工厂类,修改switch选择语句,要解决这个问题,就需要通过抽象工厂来解决了,详见工厂模式.

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生