java 工厂模式 详解

学习编程的同学一定对设计模式这个词不会陌生。其实大多数所谓的设计模式都是前人在编程实践中总结出的精华,类似于上学那会儿老师常说的数学思想等等。所谓兵无常法,只要能达到可扩展性的目的,都可以叫作设计模式。有的人知道设计模试,但不会用,有的人正在实践各设计模式而不自知。好了,进入正题-工厂模式。
什么叫工厂模式?和其他兄弟一样,他是来帮助你解耦的。我们平常创建一个实例经常用new,没媳妇,new一个;没自行车,new一个……可是,现在是一个大分工的时代,我们日常用品不是自己说new就new的,都是从别处买的,是从流水线工厂批量制造出来的。那问题就来了,想像现有一个自行车队,他们的自行车经常换,所以一个很大的需求是不定期的从各厂家批量定制自行车,这该怎么办?总不能一会new一个鸽牌的,一会一个狗牌的吧:

public interface Cycle {
    void ride();
}

public class Dovecycle implements Cycle{

    @Override
    public void ride() {
        // TODO Auto-generated method stub
        System.out.println("ride a bicycle");
    }
}

public class Dogcycle implements Cycle{

    @Override
    public void ride() {
        // TODO Auto-generated method stub
        System.out.println("ride a tricycle");
    }

}

public class RaceTeam {
    private ArrayList<Cycle> cycles = new ArrayList<Cycle>();
    public void purchaseCycles(int count){
        for(int i = 0; i<count; i++){
            Cycle doveCycle = new DoveCycle();
            doveCycle.ride();
            cycles.add(doveCycle);
        }
    }

}

多简单啊……嗯,确实想得太简单了。如果我们车队下次不想采购鸽牌的了,而想试试猫牌,狗牌的,你不要告诉我采购的流程不能用了,再重新设计吧。什么?做好的机器砸烂了重做,你以为我铁皮是白送的啊!!!

那现在该怎么办,我该怎么重新设计机器让其更加灵活呢???有了!不如制定个规范,让所有的自行车供应商遵照此规范供货,管他猫牌狗牌的,跟我没关啊:

//嗯,这是我们的要求,无论制造啥车子,按我们的标准来吧
public interface CycleFactory {
    Cycle getCycle();
}

//狗牌车公司正式成为供应商
public class DogycleFactory implements CycleFactory {

    @Override
    public Cycle getCycle() {
        // TODO Auto-generated method stub
        return new Dogcycle();
    }

}

//鸽牌也响应了
public class DovecycleFactory implements CycleFactory{

    @Override
    public Cycle getCycle() {
        // TODO Auto-generated method stub
        return new Dovecycle();
    }
}

//很好,我们这就可以改造我们的采购流程,并执行分批采购计划
public class RaceTeam {
    private ArrayList<Cycle> cycles = new ArrayList<Cycle>();
    public void purchaseCycles(CycleFactory factory,int count){
        for(int i=0;i<count;i++){
            Cycle cycle = factory.getCycle();
            cycle.ride();
            cycles.add(cycle);
        }
    }

    public static void main(String[] args) {
        RaceTeam team = new RaceTeam();
        CycleFactory factory1 = new DovecycleFactory();//鸽牌供应商有了
        CycleFactory factory2 = new DogycleFactory();//狗牌供应商


        team.purchaseCycles(factory1,4);//先来4辆鸽的
        team.purchaseCycles(factory2, 3);//再来3辆狗的
        team.purchaseCycles(factory1, 2);//鸽的不错,追加2辆

        List<Cycle> cycles = team.cycles;//收获满满的
        for(int i = 0 ; i < cycles.size();i++){
            System.out.println(cycles.get(i));
        }
    }
}

这里写图片描述

我们需求量不小,猫牌也想成为我们的长期供应商咋办,不知道,自己看着办吧……

猜你喜欢

转载自blog.csdn.net/u011193276/article/details/49692227