🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 工厂方法模式 工厂方法模式可以在不改变原来代码的情况下引入新的产品,满足开闭原则、迪米特法则、依赖倒置法则和里氏替换原则。   ## 组成 1. 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。 2. 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法(newProduct),完成具体产品的创建。 3. 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。 4. 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,**它同具体工厂之间一一对应**。 结构图: :-: ![](https://img.kancloud.cn/90/f1/90f1d5123d6e8959d3ff18bd84cb35ec_750x340.png) 【图片来源:http://c.biancheng.net/view/1348.html】 实现: ~~~ package FactoryMethod; public class AbstractFactoryTest { public static void main(String[] args) { try { Product a; AbstractFactory af; af = (AbstractFactory) ReadXML1.getObject(); a = af.newProduct(); a.show(); } catch (Exception e) { System.out.println(e.getMessage()); } } } //抽象产品:提供了产品的接口 interface Product { public void show(); } //具体产品1:实现抽象产品中的抽象方法 class ConcreteProduct1 implements Product { public void show() { System.out.println("具体产品1显示..."); } } //具体产品2:实现抽象产品中的抽象方法 class ConcreteProduct2 implements Product { public void show() { System.out.println("具体产品2显示..."); } } //抽象工厂:提供了厂品的生成方法 interface AbstractFactory { public Product newProduct(); } //具体工厂1:实现了厂品的生成方法 class ConcreteFactory1 implements AbstractFactory { public Product newProduct() { System.out.println("具体工厂1生成-->具体产品1..."); return new ConcreteProduct1(); } } //具体工厂2:实现了厂品的生成方法 class ConcreteFactory2 implements AbstractFactory { public Product newProduct() { System.out.println("具体工厂2生成-->具体产品2..."); return new ConcreteProduct2(); } } ~~~