工厂方法模式
工厂方法
引入的原因:
简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。
优点:
-
用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
-
灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
-
典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
缺点
-
类的个数容易过多,增加复杂度
-
增加了系统的抽象性和理解难度
-
抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。
图
代码示例
产品(Product)接口
public interface MachineApi {
//process:加工 material:材料
public void process(String material);
}
具体产品
public class SteamedBunMachine implements MachineApi {
@Override
public void process(String material) {
System.out.println("我把" + material + "加工成了馒头");
}
}
public class BoodleMachine implements MachineApi {
@Override
public void process(String material) {
System.out.println("我把" + material + "加工成了面条");
}
}
抽象工厂
public abstract class Factory{
/**
* 让子类(具体工厂)来实例化具体对象(机器)
*/
public abstract MachineApi newMachine();
/**
* 加工材料
*/
public void process(String material){
MachineApi machine = newMachine();
machine.process(material);
}
}
对应的产品的生产工厂
public class SteamedBunFactory extends Factory{
//馒头工厂,只需要提供馒头机器就行
@Override
public MachineApi newMachine() {
return new SteamedBunMachine();
}
}
public class NoodleFactory extends Factory{
//面条工厂,只需要提供面条机器就行
@Override
public MachineApi newMachine() {
return new BoodleMachine();
}
}
生产的信息
SteamedBunFactory mSteamedBunFactory = new SteamedBunFactory ();
mSteamedBunFactory.process("面粉");//我把面粉加工成了馒头
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/14984369.html