设计模式之——工厂模式

来源:互联网 发布:java string类getchars 编辑:程序博客网 时间:2024/06/06 01:43

什么是工厂模式?
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

//工厂public class Factory {    public BMW createBMW(int type){        switch (type) {        case 320:            return new BMW320();        case 523:            return new BMW523();        }        return null;    }}//定义实体类abstract class BMW {    public BMW(){    }}public class BMW320 extends BMW {    public BMW320(){        System.out.println("制造320");    }}public class BMW523 extends BMW {    public BMW523(){        System.out.println("制造523");    }}//定义消费者public class Customer {    public static void main(String[] args) {        Factory factory = new Factory();        factory.createBMW(320);        factory.createBMW(523);    }}

上面就是最最简单的工厂模式的例子,下面所要说的是抽象工厂模式,我的简单理解是:顶层的是抽象工厂,它定义了要生产哪些类型的东西,下面的子类工厂继承抽象工厂,来具体定义要生产什么样的东西,我们要用的时候就直接调用什么样的工厂来生产

**我们先来定义一个抽象工厂,定义要生产什么类型的东西**/** * * @ClassName: AbstractFactory  * @Description: 抽象工厂* @author 志辉  * @date 2017年8月17日 */public abstract class AbstractFactory {    abstract Food createFood();     abstract  Water createWater();}**再来定义一个健康工厂,顾名思义,里面生产的全是健康的东西**public class HealthyFactory extends AbstractFactory{    @Override    Food createFood() {        return new Noodles();//生产面条    }    @Override    Water createWater() {        return new SpringWater();//生产纯净水    }}**定义不健康的工厂,生产的是高热量的东西**public class UnhealthyFactory extends AbstractFactory {    @Override    Food createFood() {        return new KFC();//生产快餐    }    @Override    Water createWater() {        return new Cola();//生产可乐    }}**来定义一个食品介绍自己的接口,里面是介绍的方法,因为想不到其他的好的定义了=。= **/** * * @ClassName: Introduction  * @Description: 定义一个介绍的接口* @author 志辉  * @date 2017年8月17日 */public interface Introduction {    void introduce();}**来定义food water 等具体的实体类**public abstract class Food implements Introduction {}public abstract class Water implements Introduction{}public class Cola extends Water implements Introduction{    @Override    public void introduce() {        System.out.println("我是可乐,虽然我很好喝,但是却不健康哦");    }}public class KFC extends Food implements Introduction {    @Override    public void introduce() {        System.err.println("我是快餐,虽然很好吃,但是不太健康哦");           }}public class Noodles extends Food implements Introduction{    @Override    public void introduce() {        System.out.println("我是面条,我很好吃,也很健康!");    }}public class SpringWater extends Water implements Introduction {    @Override    public void introduce() {        System.out.println("我是矿泉水,很健康!");    }}**下面开始测试**/** * * @ClassName: Test  * @Description: 测试类* @author 志辉  * @date 2017年8月17日 */public class Test {    public static void main(String[] args) {        AbstractFactory f1 = new HealthyFactory();        AbstractFactory f2 = new UnhealthyFactory();        Food noodles = f1.createFood();        Food kfc = f2.createFood();        Water springwater = f1.createWater();        Water cola = f2.createWater();        noodles.introduce();        kfc.introduce();        springwater.introduce();        cola.introduce();    }}**打印结果:我是面条,我很好吃,也很健康!我是矿泉水,很健康!我是可乐,虽然我很好喝,但是却不健康哦我是快餐,虽然很好吃,但是不太健康哦****从上面可以看出,我们想要什么样的东西就可以通过创建什么样的工厂然后调用createxxx方法来创建一个相对应的对象,创建的工厂会很多次用到多态。为什么明明可以直接用new解决的问题,偏偏还去搞个什么各种工厂,有点脱了裤子放屁的感觉,具体原因我还不能给出准确的答案,但相信不久的将来,我们一定会感受出其中的道理。**
原创粉丝点击