Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 62.2MB ·虚拟内存 1299.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
简单工厂模式(Simple Factory Pattern)专门定义一个工厂类来负责创建其它类的范例,被创建的范例具有共同的父类。
简单工厂模式又叫做静态工厂模式,属于创建型模式,它提供了一种创建对象的最佳方式。
在简单工厂模式中,调用者通过提供简单的参数,从工厂类获取所需的产品类的范例。
简单工厂模式的目的是把对象的创建和使用分离开来。
简单工厂模式通过工厂类的封装了具体产品类的创建过程,从而解除调用程序和具体产品类之间的耦合。
工厂类在创建对象时不会对调用者暴露创建逻辑,并且使用一个共同的接口来指向新创建的对象。
调用者只需提供名称就可以创建一个产品对象,无需了解对象的创建逻辑,简化了客户端创建对象的复杂度。
简单工厂模式屏蔽了产品的具体实现,调用者只关心产品的接口,从而降低了客户端使用对象的难度。
我们首先创建一个 Shape 接口和实现 Shape 接口的实体类,然后定义一个工厂类 ShapeFactory,用于创建 Shape 的实体类。
FactoryPatternDemo 类是客户端,它使用 ShapeFactory 来获取 Shape 对象,对象的类型由参数指定。
package com.aizws.simplefactory; /** * Shape 接口类 * @author 编程教程 * */ public interface Shape { void draw(); } /** * Rectangle 实体类 * @author 编程教程 * */ public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } /** * Circle 实体类 * @author 编程教程 * */ public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); } } /** * Square 实体类 * @author 编程教程 * */ public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } /** * ShapeFactory 工厂类 * @author 编程教程 * */ public class ShapeFactory { // 使用 getShape 方法获取指定类型的对象 public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("Circle")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("Rectangle")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("Square")){ return new Square(); } return null; } } /** * 客户端,调用工厂类 * @author 编程教程 * */ public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); // 获取 Circle 的对象,并调用它的 draw 方法 Shape sc = shapeFactory.getShape("Circle"); sc.draw(); // 获取 Rectangle 的对象,并调用它的 draw 方法 Shape sr = shapeFactory.getShape("Rectangle"); sr.draw(); // 获取 Square 的对象,并调用它的 draw 方法 Shape ss = shapeFactory.getShape("Square"); ss.draw(); } }
执行程序,输出结果:
Inside Circle::draw() method. Inside Rectangle::draw() method. Inside Square::draw() method.
简单工厂模式是工厂模式的简化形式,在实际使用中并不多见,因为它违背了开闭原则,不易维护,更常用的是工厂模式。简单工厂模式不属于 GOF 提出的23种设计模式。