背景:
如上一篇文章简单工厂模式,其中的一个问题就是工厂太单一,如果产品比较复杂,扩展是工厂会变的比较臃肿,变成了一个大杂烩的工厂,随着产品的赠品,一定会产生维护艰难的情况发生,而且也不符合单一职责的原则,所以为了解决这个问题引出了一个设计模式,工厂方法模式。
根据单一职责原则,我们将工厂抽象,专门的工厂解决创建专门的产品。
优缺点:
优点:
1:一定程度上增加了扩展性,创建新对象只需要增加新的工厂
2:解耦:顶层模块不需要关心底层模块之间的各个抽象类的情况,使用相关工厂调用即可
缺点:
1:类会越建越多
2:抽象产品只能生产一种产品
类图:
举个例子:
1:新建一个产品的上层抽象接口,比如我的目的是实现输出汽车的名称,首先抽象一个ICar的接口
public interface ICar {
public void name();
}
2:分别建两个类,实现ICar接口,重写name()
public class Lamborghini implements ICar {
@Override
public void name() {
System.out.println("I AM A Lamborghini");
}
}
public class Bus implements ICar{
@Override
public void name() {
System.out.println("I AM A BUS");
}
}
3:创建一个产品相关的工厂抽象
public interface ICarFactory {
ICar create ();
}
4:具体的工厂去实现每个工厂相关的产品
public class BusFactory implements ICarFactory {
@Override
public ICar create() {
return new Bus();
}
}
public class LamborghiniFactory implements ICarFactory {
@Override
public ICar create() {
return new Lamborghini();
}
}
5:测试
public class FactoryTest {
public static void main (String[] args) {
ICarFactory carFactory1 = new LamborghiniFactory();
ICar iCar1 = carFactory1.create();
iCar1.name();
ICarFactory carFactory2 = new BusFactory();
ICar iCar2 = carFactory2.create();
iCar2.name();
}
}
6:结果
I AM A Lamborghini
I AM A BUS