Java 工厂方法模式:创建对象而不指定具体类285
工厂方法模式是一种创建型设计模式,它允许你在不指定具体类的情况下创建一个对象的实例。这使得代码更加灵活,更容易扩展,因为你可以在不修改现有代码的情况下添加新类。
优点
灵活性:你可以轻松地添加新产品而无需修改现有代码。
解耦:客户端代码与具体产品类解耦,使其更容易维护和测试。
封装:工厂方法类封装了创建过程,隐藏了具体产品的实现细节。
实现
工厂方法模式包含以下角色:
工厂(Creator):定义创建对象的工厂接口,但具体创建由子类决定。
具体工厂(ConcreteCreator):实现工厂接口并创建具体的产品对象。
产品(Product):产品类的抽象接口,具体产品类实现该接口。
具体产品(ConcreteProduct):实现产品接口并表示实际创建的对象。
客户端(Client):通过工厂接口来创建产品对象。它不需要知道具体产品的类。
以下是一个 Java 工厂方法模式示例,其中创建不同的形状:```java
// (Factory)
interface ShapeFactory {
Shape createShape(String shapeType);
}
// (ConcreteCreator)
class RectangleFactory implements ShapeFactory {
@Override
public Shape createShape(String shapeType) {
if (("RECTANGLE")) {
return new Rectangle();
} else {
return null;
}
}
}
// (ConcreteCreator)
class SquareFactory implements ShapeFactory {
@Override
public Shape createShape(String shapeType) {
if (("SQUARE")) {
return new Square();
} else {
return null;
}
}
}
// (Product)
interface Shape {
void draw();
}
// (ConcreteProduct)
class Rectangle implements Shape {
@Override
public void draw() {
("Drawing a rectangle...");
}
}
// (ConcreteProduct)
class Square implements Shape {
@Override
public void draw() {
("Drawing a square...");
}
}
// (Client)
class Client {
public static void main(String[] args) {
ShapeFactory shapeFactory = new RectangleFactory();
Shape rectangle = ("RECTANGLE");
();
shapeFactory = new SquareFactory();
Shape square = ("SQUARE");
();
}
}
```
何时使用
工厂方法模式适用于以下情况:
当你不希望客户端知道创建的对象类型时。
当你想要提供一个可扩展的接口来创建对象时。
当你想将对象的创建与其实际表示分离时。
替代模式
工厂方法模式有几个替代模式:
抽象工厂模式:创建一组相关的对象,而工厂方法模式仅创建单个对象。
建造者模式:逐步创建一个对象,而工厂方法模式直接创建一个对象。
原型模式:克隆一个现有对象,而工厂方法模式创建一个新对象。
工厂方法模式是一种创建型设计模式,它允许你在不指定具体类的情况下创建一个对象的实例。这使得代码更加灵活,更容易扩展,并且可以将对象的创建与其实际表示分离。它适用于各种情况,并有多个替代模式可供选择。
2024-10-14
上一篇:Java 字符串赋值方法详解

Java后台数据校验最佳实践:从基础到高级
https://www.shuihudhg.cn/126291.html

Java字符统计:高效算法与最佳实践
https://www.shuihudhg.cn/126290.html

Python 极简代码技巧:精简、高效与可读性
https://www.shuihudhg.cn/126289.html

Python表白神器:从入门到精通,编写浪漫的代码
https://www.shuihudhg.cn/126288.html

Java中动态数组:ArrayList与其他可变长度数据结构详解
https://www.shuihudhg.cn/126287.html
热门文章

Java中数组赋值的全面指南
https://www.shuihudhg.cn/207.html

JavaScript 与 Java:二者有何异同?
https://www.shuihudhg.cn/6764.html

判断 Java 字符串中是否包含特定子字符串
https://www.shuihudhg.cn/3551.html

Java 字符串的切割:分而治之
https://www.shuihudhg.cn/6220.html

Java 输入代码:全面指南
https://www.shuihudhg.cn/1064.html