目录标题
- 工厂方法设计模式详解
- 1. 介绍
- 2. 结构
- 3. 实现步骤
- 3.1 创建抽象产品接口
- 3.2 创建具体产品类
- 3.3 创建抽象工厂接口
- 3.4 创建具体工厂类
- 3.5 客户端使用
- 4. 好处与优点
- 5. 坏处与缺点
- 6. 适用场景
- 7. 总结
工厂方法设计模式详解
1. 介绍
工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。这样,工厂方法模式让一个类的实例化延迟到其子类。在Java中,工厂方法模式经常用于创建对象,使得客户端代码不需要直接依赖具体的类,而是依赖于接口或抽象类。
2. 结构
工厂方法模式的主要结构包括以下几个角色:
- 抽象产品(Product):定义产品的接口,是具体产品类的父类或者是接口。
- 具体产品(ConcreteProduct):实现抽象产品接口,是工厂方法模式中具体创建的对象。
- 抽象工厂(Creator):定义一个创建产品对象的方法,返回一个抽象产品对象。
- 具体工厂(ConcreteCreator):实现抽象工厂接口,具体负责创建具体产品对象。
3. 实现步骤
下面以一个简单的示例来说明工厂方法模式的实现过程,假设我们有一个形状(Shape)接口和两个具体形状类:圆形(Circle)和正方形(Square)。
3.1 创建抽象产品接口
// Shape.java
public interface Shape {void draw();
}
3.2 创建具体产品类
// Circle.java
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("画一个圆形");}
}// Square.java
public class Square implements Shape {@Overridepublic void draw() {System.out.println("画一个正方形");}
}
3.3 创建抽象工厂接口
// ShapeFactory.java
public interface ShapeFactory {Shape createShape();
}
3.4 创建具体工厂类
// CircleFactory.java
public class CircleFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Circle();}
}// SquareFactory.java
public class SquareFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Square();}
}
3.5 客户端使用
// Client.java
public class Client {public static void main(String[] args) {ShapeFactory circleFactory = new CircleFactory();Shape circle = circleFactory.createShape();circle.draw();ShapeFactory squareFactory = new SquareFactory();Shape square = squareFactory.createShape();square.draw();}
}
4. 好处与优点
松耦合:工厂方法模式将客户端代码与具体产品的实现分离,使得客户端不需要知道具体产品的类名,只需关注抽象产品和工厂接口。
扩展性强:通过新增具体工厂和产品类,可以轻松扩展系统,符合开闭原则。
符合单一职责原则:每个具体工厂只负责创建一种具体产品,符合单一职责原则。
5. 坏处与缺点
类数量增多:每个具体产品都需要对应一个具体工厂,当产品种类较多时,类的数量会增加。
增加系统复杂度:引入了更多的类和接口,增加了系统的复杂度,适用于较复杂的场景。
6. 适用场景
工厂方法模式适用于以下场景:
- 当一个类不知道它所需要的对象的类时,可以使用工厂方法模式,让子类决定创建的具体对象。
- 当一个类希望由它的子类来指定它所创建的对象时,可以使用工厂方法模式。
7. 总结
工厂方法模式是一种常见且实用的设计模式,通过定义工厂接口和具体工厂类,将对象的创建延迟到子类中实现,从而提高了代码的灵活性和扩展性。在设计系统时,根据具体需求选择合适的设计模式能够提高代码的可维护性和可扩展性。