Java工厂模式和抽象工厂模式
引言
在软件开发过程中,我们经常会遇到需要创建对象的情况。在面向对象编程中,可以使用构造函数或者new关键字来创建对象,但这种方式并不是总是最佳的选择。因此,工厂模式和抽象工厂模式应运而生,它们提供了一种更灵活、可扩展的对象创建方式。
本文将介绍Java中的工厂模式和抽象工厂模式,包括它们的定义、特点和代码示例等内容。
工厂模式
定义
工厂模式是一种创建型设计模式,它提供了一种将对象的创建逻辑封装到工厂类中的方式。工厂类根据客户端传递的参数或条件来决定创建哪种类型的对象,并返回该对象给客户端使用。
特点
- 将对象的创建和使用分离,客户端只需要关心对象的使用,无需关心对象的创建过程。
- 通过工厂类的封装可以实现对象的复用和解耦,减少重复的代码。
代码示例
以下是一个简单的工厂模式示例,假设我们有两个形状(圆形和矩形)的类需要创建:
// 形状接口
interface Shape {
void draw();
}
// 圆形类
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
// 矩形类
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
// 形状工厂类
class ShapeFactory {
// 根据传入的形状类型创建对应的对象
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();
}
return null;
}
}
// 客户端使用示例
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
// 创建圆形对象
Shape circle = shapeFactory.getShape("CIRCLE");
circle.draw();
// 创建矩形对象
Shape rectangle = shapeFactory.getShape("RECTANGLE");
rectangle.draw();
}
}
在上述代码中,我们定义了一个Shape接口和两个具体的形状类Circle和Rectangle。ShapeFactory是形状工厂类,它根据传入的形状类型返回对应的形状对象。客户端使用ShapeFactory创建并使用不同的形状对象。
抽象工厂模式
定义
抽象工厂模式是一种创建型设计模式,它通过提供一个接口或抽象类来声明一组相关或依赖对象的创建方法。具体的工厂类实现该接口或继承该抽象类,并负责创建一组具体的对象。
特点
- 抽象工厂模式将一组相关或依赖的对象的创建封装到具体的工厂类中,提供了一种统一的创建方式。
- 抽象工厂模式可以保持系统的一致性,客户端使用时无需关心具体的工厂类和对象,只需要通过抽象工厂来创建对象。
代码示例
以下是一个简单的抽象工厂模式示例,假设我们有两个形状(圆形和矩形)和两个颜色(红色和蓝色)的类需要创建:
// 形状接口
interface Shape {
void draw();
}
// 圆形类
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
// 矩形类
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
// 颜
















