3W2H学设计模式- 工厂模式(Factory Pattern)
一、WHAT 什么是工厂模式
工厂模式(Factory Pattern)是创建型模式的一种,让其子类自己决定实例化哪个工厂类,工厂模式使其创建过程中实例化子类。工厂模式满足开闭原则,在不修改系统代码情况下创建不同的子类
二、WHY 为什么用工厂模式
- 满足面向对象开闭原则,只要知道工厂名称就能完成子类的实例化。
- 扩展性高,如果想扩展一个产品,只需继承扩展一个工厂子类就能完成。
- 具有解耦合特性,高层模块只要知道产品的抽象类,无需关系其实现类。
三、WHEN 什么时候用工厂模式
- 在任何需要生成复杂对象的地方,都可以使用工厂方法模式.只有复杂的对象才适用于工厂方法模式.对于简单的只要通过new就可以完成创建的对象,无需使用工厂模式.如果简单对象使用工厂模式,需要引入一个工厂类,增加系统的复杂度
- 工厂模式是一种典型的解耦模式,当类之间需要增加依赖关系时,可以使用工厂模式降低系统之间的耦合度
- 工厂模式是依靠抽象架构的,将实例化的任务交给子类实现,扩展性好.当系统需要较好的扩展性时,可以使用工厂模式,不同的产品使用不同的工厂来实现组装
四、HOW 如何实现工厂模式
简单工厂UML图
package FactoryPattern; public interface IProduct { void show(); }
package FactoryPattern; public class AProduct implements IProduct { @Override public void show() { System.out.println("This is A Product"); } }
package FactoryPattern; public class BProduct implements IProduct { @Override public void show() { System.out.println("This is BProduct"); } }
package FactoryPattern; public class ProductFactory { public static IProduct createProduct(String name) { IProduct product = null; switch (name) { case "AProduct": product = new AProduct(); break; case "BProduct": product = new BProduct(); break; default: product = null; break; } return product; } }
5.完成工厂的调用
public class AppClient { public static void main(String[] args) { ProductFactory.createProduct("AProduct").show(); } }
五、HOW TO CHANGE(工厂模式在代码中如何使用)
1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2、数据库访问:当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
3、代码生成器:配置根据不同语言生成不同的系统