首页 > 其他 > 详细

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

时间:2015-03-04 21:10:55      阅读:303      评论:0      收藏:0      [点我收藏+]

从现实入手

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

一般思想,无非建立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次实例化,如果我开个动物园,实例化的语句怎么办呢?总不能有多少动物就写多少动物吧。如果我圈养十几只动物,每天喂养他们,毫无疑问上述的客户端会变得杂乱不堪。
这样就引出了简单工厂模式。


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;
    }
}

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

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....
        }
    }

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

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

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

原文:http://blog.csdn.net/langduhualangdu/article/details/44063727

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!