23种常用设计模式之工厂模式:工厂方法模式

说明

工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品

应用场景

  • 对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况
  • 只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。

模式特征

  • 一个抽象产品类——Computer
  • 多个具体产品类——LenovoComputer、HuaWeiComputer
  • 一个抽象工厂——ComputerFactory
  • 多个具体工厂,每个具体工厂对应一个具体产品——LenovoFactory、HuaWeiFactory

UML

工厂方法模式类图

代码实现

  • 抽象产品类
public interface Computer {
    void computerInfo();
}
  • 具体产品类一
public class LenovoComputer implements Computer {
    public void computerInfo() {
        System.out.println("我是联想电脑");
    }
}
  • 具体产品类二
public class HuaWeiComputer implements Computer {
    public void computerInfo() {
        System.out.println("我是华为电脑");
    }
}
  • 抽象工厂
public interface ComputerFactory {
    Computer generateComputer();
}
  • 具体工厂类一
public class LenovoFactory implements ComputerFactory {
    public Computer generateComputer() {
        return new LenovoComputer();
    }
}
  • 具体工厂类二
public class HuaWeiFactory implements ComputerFactory {
    public Computer generateComputer() {
        return new HuaWeiComputer();
    }
}
  • 客户端测试类
public class Client {
    public static void main(String[] args) {
        ComputerFactory computerFactory = new LenovoFactory();//生产哪件电脑由客户决定
        Computer computer = computerFactory.generateComputer();
        computer.computerInfo();
    }
}

优缺点

  • 优点:降低了代码耦合度,对象的生成交与子类完成;实现了OCP原则,每次添加子产品不需要修改源代码。
  • 缺点:代码量增大,每个具体产品需要一个具体工厂;当增加抽象产品,也就是添加一个其他产品类时,需要修改工厂,违背开闭原则
原创文章 67 获赞 31 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u012534326/article/details/102492748