深入理解Java三种工厂模式
工厂设计模式概述
工厂设计模式是一种常见的创建型设计模式,它提供了一个创建对象的接口,但是允许子类决定实例化哪个类。工厂模式可以将对象的实例化过程从客户代码中分离出来,从而实现了松耦合,提高了代码的可维护性和可扩展性。
Java中有三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式。接下来我们将逐一解析这三种模式。
简单工厂模式
定义
简单工厂模式(Simple Factory Pattern)又称为静态工厂方法模式(Static Factory Method Pattern),它属于创建型模式。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。
示例
- 首先定义一个形状接口(Shape)和其实现类圆形(Circle)、正方形(Square)和长方形(Rectangle)
// Shape
public interface Shape {
void draw();
}
// Circle
public class Circle implements Shape {
public void draw() {
System.out.println("画圆形");
}
}
// Square
public class Square implements Shape {
public void draw() {
System.out.println("画正方形");
}
}
// Rectangle
public class Rectangle implements Shape {
public void draw() {
System.out.println("画长方形");
}
}
- 创建一个简单工厂类(ShapeFactory),它用于根据传入的参数(shapeType)创建对应的形状对象
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("SQUARE")) {
return new Square();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
- 调用简单工厂类来创建形状对象,并调用draw方法
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.getShape("CIRCLE");
circle.draw();
Shape square = shapeFactory.getShape("SQUARE");
square.draw();
Shape rectangle = shapeFactory.getShape("RECTANGLE");
rectangle.draw();
输出结果:
画圆形
画正方形
画长方形
工厂方法模式
定义
工厂方法模式(Factory Method Pattern)又称为工厂模式,它属于创建型模式。
工厂方法模式的核心是一个抽象工厂类,而具体的产品实现则由具体的工厂类负责生产。
示例
- 定义一个形状接口(Shape)和它的实现类圆形(Circle)、正方形(Square)和长方形(Rectangle)
// Shape
public interface Shape {
void draw();
}
// Circle
public class Circle implements Shape {
public void draw() {
System.out.println("画圆形");
}
}
// Square
public class Square implements Shape {
public void draw() {
System.out.println("画正方形");
}
}
// Rectangle
public class Rectangle implements Shape {
public void draw() {
System.out.println("画长方形");
}
}
- 创建一个形状工厂接口(ShapeFactory)和其实现类圆形工厂(CircleFactory)、正方形工厂(SquareFactory)和长方形工厂(RectangleFactory)。
// ShapeFactory
public interface ShapeFactory {
Shape createShape();
}
// CircleFactory
public class CircleFactory implements ShapeFactory {
public Shape createShape() {
return new Circle();
}
}
// SquareFactory
public class SquareFactory implements ShapeFactory {
public Shape createShape() {
return new Square();
}
}
// RectangleFactory
public class RectangleFactory implements ShapeFactory {
public Shape createShape() {
return new Rectangle();
}
}
- 调用具体的工厂类来创建形状对象,并调用draw方法
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.createShape();
circle.draw();
ShapeFactory squareFactory = new SquareFactory();
Shape square = squareFactory.createShape();
square.draw();
ShapeFactory rectangleFactory = new RectangleFactory();
Shape rectangle = rectangleFactory.createShape();
rectangle.draw();
输出结果:
画圆形
画正方形
画长方形
抽象工厂模式
定义
抽象工厂模式(Abstract Factory Pattern)又称为工具箱模式,它是一种设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。
如果一个系统中的产品种类需要经常扩展,那么抽象工厂模式是最适合的设计模式。
示例
- 定义一个形状接口(Shape)和颜色接口(Color)以及它们的实现类圆形(Circle)、正方形(Square)、长方形(Rectangle)、红色(Red)、绿色(Green)和蓝色(Blue)
// Shape
public interface Shape {
void draw();
}
// Circle
public class Circle implements Shape {
public void draw() {
System.out.println("画圆形");
}
}
// Square
public class Square implements Shape {
public void draw() {
System.out.println("画正方形");
}
}
// Rectangle
public class Rectangle implements Shape {
public void draw() {
System.out.println("画长方形");
}
}
// Color
public interface Color {
void fill();
}
// Red
public class Red implements Color {
public void fill() {
System.out.println("填充红色");
}
}
// Green
public class Green implements Color {
public void fill() {
System.out.println("填充绿色");
}
}
// Blue
public class Blue implements Color {
public void fill() {
System.out.println("填充蓝色");
}
}
- 创建一个抽象工厂类(AbstractFactory),它具有创建形状对象(createShape)和创建颜色对象(createColor)的抽象方法。
public abstract class AbstractFactory {
abstract Shape createShape(String shapeType);
abstract Color createColor(String colorType);
}
- 创建形状工厂类(ShapeFactory)和颜色工厂类(ColorFactory),它们都继承了抽象工厂类,分别实现了创建形状对象和颜色对象的方法。
public class ShapeFactory extends AbstractFactory {
public Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("SQUARE")) {
return new Square();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
public Color createColor(String colorType) {
return null;
}
}
public class ColorFactory extends AbstractFactory {
public Shape createShape(String shapeType) {
return null;
}
public Color createColor(String colorType) {
if (colorType.equalsIgnoreCase("RED")) {
return new Red();
} else if (colorType.equalsIgnoreCase("GREEN")) {
return new Green();
} else if (colorType.equalsIgnoreCase("BLUE")) {
return new Blue();
}
return null;
}
}
- 创建工厂创造器(FactoryProducer)来获取形状工厂或颜色工厂的实例。
public class FactoryProducer {
public static AbstractFactory getFactory(String choice) {
if (choice.equalsIgnoreCase("SHAPE")) {
return new ShapeFactory();
} else if (choice.equalsIgnoreCase("COLOR")) {
return new ColorFactory();
}
return null;
}
}
- 调用工厂创造器的静态方法getFactory() 来获取具体的工厂,并通过该工厂创建形状和颜色对象,并调用对应的方法。
//获取形状工厂
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
//获取形状为圆形的对象,并调用draw方法
Shape circle = shapeFactory.createShape("CIRCLE");
circle.draw();
//获取颜色工厂
AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
//获取颜色为红色的对象,并调用fill方法
Color red = colorFactory.createColor("RED");
red.fill();
输出结果:
画圆形
填充红色
总结
以上就是Java中的三种工厂模式的详细介绍和实现示例。简单工厂模式适用于简单情况下的对象创建,工厂方法模式适用于需要更好的代码扩展性的情况,抽象工厂模式适用于需要实现多个产品接口的复杂情况。根据业务需求来选择适合的工厂模式是非常有必要的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解java三种工厂模式 - Python技术站