java工厂方法模式


在看下面讲解之前,最好还是先看下笔者的 简单工厂模式,因为我的例子,是有联系的;


目录


代码

工厂接口:

/**
 * 工厂接口,抽象出工厂具体的公有方法
 */
interface Factory{
    Produce factoryProduce();
}

工厂实现类:

/**
 * 工厂实现类
 */
class PianoFactory implements Factory{

    @Override
    public Produce factoryProduce() {
        return new Piano();
    }
}

class MotorcycleFactory implements Factory{

    @Override
    public Produce factoryProduce() {
        return new Motorcycle();
    }
}

测试类:

    @Test
    public void Test(){
//        客户端需要制造一台钢琴
        Factory factory = new PianoFactory();
        Produce produce = factory.factoryProduce();
        produce.method();

//        客户端制造一台摩托车
        Factory factory1 = new MotorcycleFactory();
        Produce produce1 = factory1.factoryProduce();
        produce1.method();

    }

后期添加新的类(浴缸):

/**
 * 浴缸类
 */
class Bathtub implements Produce {
    @Override
    public void method() {
        System.out.println("制造出一个浴缸");
    }
}

浴缸工厂类:

class BathtubFactory implements Factory{

    @Override
    public Produce factoryProduce() {
        return new Bathtub();
    }
}

测试:

//  对于后期添加的浴缸,客户端不需要改动现有的代码
        Factory factory2 = new BathtubFactory();
        Produce produce2 = factory2.factoryProduce();
        produce2.method();

图解工厂方法模式

肚子有点疼

简单工厂模式 相比,工厂方法模式,更抽象一点,它把工厂也抽象出一个接口来它让一个工厂只负责生产一种产品;


优点

简单工厂模式 的优点,继续保持,还克服了 简单工厂模式 的缺点 ;

  • 新增产品,不需要改动现有的代码

当有新的产品需要添加进框架里面的时候,我们是不需要去改动现有的代码的;只需要写出对应的 产品类工厂实现类;然后在API里面写上新增的产品即可 ;原有的 代码是一行都不需要改动的 ;


缺点

  • 增加系统的负担
  • 代码量剧增
  • 一个工厂只能生产一个产品

API 的设计者,新增新的产品的时候,设计者自己就蛋疼的很了,每一新增一个产品,他就需要对应的写一个工厂类,导致代码量剧增;

客户端在使用的时候,每次使用一个产品类的时候,都需要调用对应的工厂类,无形之中增加了系统的负担 ;


改进:

要克服上面的缺点,就需要使用 抽象工厂模式 了 ;

posted @ 2018-05-02 21:55  Yiaz  阅读(98)  评论(0编辑  收藏  举报