【简单工厂和抽象工厂的区别以及Java代码实例】
简单工厂和抽象工厂是两种常见的设计模式,它们都属于工厂模式的变体。它们的区别在于,简单工厂只有一个工厂类,负责创建所有产品,而抽象工厂则有多个工厂类,每个工厂类负责创建一组相关的产品。
下面是两种设计模式的Java代码实例:
简单工厂
package com.lfsun.main.demoleetcode.other; // 抽象产品类 interface Shape { void draw(); } // 具体产品类 class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } // 具体产品类 class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } // 简单工厂类 class SimpleFactory { // 静态工厂方法 简单工厂只有一个工厂类,具体创建哪个需要在工厂类里面创建 public static Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } } // 客户端代码 public class SimpleFactoryMain { public static void main(String[] args) { Shape shape1 = SimpleFactory.getShape("RECTANGLE"); shape1.draw(); Shape shape2 = SimpleFactory.getShape("SQUARE"); shape2.draw(); } }
抽象工厂
package com.lfsun.main.demoleetcode.other; // 抽象产品类 interface Shape1 { void draw(); } // 具体产品类 class Rectangle1 implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } // 具体产品类 class Square1 implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } // 抽象工厂类 interface AbstractFactory { /** * 抽象工厂有多个工厂类。抽象工厂还可以进一步扩展,比如可以增加一个新的工厂类来创建新的产品。 * @return */ Shape getShape(); } // 具体工厂类 class RectangleFactory implements AbstractFactory { @Override public Shape getShape() { return new Rectangle(); } } // 具体工厂类 class SquareFactory implements AbstractFactory { @Override public Shape getShape() { return new Square(); } } // 客户端代码 public class AbstractFactoryMain { public static void main(String[] args) { AbstractFactory abstractFactory1 = new RectangleFactory(); Shape shape1 = abstractFactory1.getShape(); shape1.draw(); AbstractFactory abstractFactory2 = new SquareFactory(); Shape shape2 = abstractFactory2.getShape(); shape2.draw(); } }
简单工厂和抽象工厂都是创建型设计模式,用于创建对象。它们的主要区别在于:
简单工厂只有一个工厂类,通过该类的静态方法根据传入的参数创建不同的对象。而抽象工厂则有多个工厂类,每个工厂类负责创建一组相关的对象。 简单工厂的产品对象通常属于同一类别,而抽象工厂则可以创建不同类别的产品对象。 简单工厂的工厂类通常是静态的,而抽象工厂的工厂类是动态创建的。
总之,简单工厂适用于创建一组类似的对象,而抽象工厂则适用于创建一组不同类型的对象。
下一篇:
详解-赋值运算符重载(C++)