介绍
工厂方法模式是定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。
优点
1.符合开放封闭原则,新增产品时,只需增加相应的具体产品类和对应的具体工厂类;
2.符合单一职责原则,每个具体的工作类只负责创建对应的产品类;
3.使用时只需知道具体工厂类就好,不需要知道具体产品类。
缺点
1.一个具体工厂类只能创建一个具体产品类;
2.新增一个产品类,还要新增一个工厂类。这样容易导致类过多,增加复杂度。
使用场景
在使用时不需要具体的产品类名,只需要知道工厂类名即可。
实现
工厂方法模式由一个抽象产品类、具体产品类、抽象工厂类、具体工厂类构成。
/**
* 抽象产品类
*/
public interface Product {
void info();
}
/**
* 具体产品类 1
*/
public class AirplaneProduct implements Product {
@Override
public void info() {
//处理逻辑
Log.e("test","制造飞机");
}
}
/**
* 具体产品类 2
*/
public class CannonProduct implements Product {
@Override
public void info() {
//处理逻辑
Log.e("test","制造大炮");
}
}
/**
* 抽象工厂类
*/
public interface AbstractFactory {
Product newFactory();
}
/**
* 具体工厂类
*/
public class AirplaneFactory implements AbstractFactory {
@Override
public Product newFactory() {
return new AirplaneProduct();
}
}
/**
* 具体工厂类
*/
public class CannonFactory implements AbstractFactory {
@Override
public Product newFactory() {
return new CannonProduct();
}
}
//实现
AbstractFactory factory=new AirplaneFactory();
Product product= factory.newFactory();
product.info();
AbstractFactory factory2=new CannonFactory();
Product product2= factory2.newFactory();
product2.info();