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
的设计者,新增新的产品的时候,设计者自己就蛋疼的很了,每一新增一个产品,他就需要对应的写一个工厂类,导致代码量剧增;
客户端在使用的时候,每次使用一个产品类的时候,都需要调用对应的工厂类,无形之中增加了系统的负担 ;
改进:
要克服上面的缺点,就需要使用 抽象工厂模式
了 ;