您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java设计模式中工厂模式的定义及代码演示
## 一、工厂模式概述
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,属于**创建型模式**,主要解决对象创建过程中的灵活性问题。其核心思想是将**对象的实例化过程**与**客户端代码**分离,通过专门的工厂类来控制对象的创建。
### 1.1 核心作用
- 解耦:客户端不需要知道具体类的创建细节
- 扩展性:新增产品类时不影响现有代码
- 统一管理:集中控制对象的创建逻辑
### 1.2 三种实现形式
1. 简单工厂模式(静态工厂)
2. 工厂方法模式(多态工厂)
3. 抽象工厂模式(产品族工厂)
---
## 二、简单工厂模式
### 2.1 定义
通过一个静态方法根据传入参数的不同返回不同类的实例。
```java
// 产品接口
interface Product {
void operation();
}
// 具体产品A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("执行产品A的操作");
}
}
// 具体产品B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("执行产品B的操作");
}
}
// 简单工厂
class SimpleFactory {
public static Product createProduct(String type) {
switch (type) {
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new IllegalArgumentException("未知产品类型");
}
}
}
// 客户端使用
public class Client {
public static void main(String[] args) {
Product productA = SimpleFactory.createProduct("A");
productA.operation();
Product productB = SimpleFactory.createProduct("B");
productB.operation();
}
}
✅ 优点: - 客户端与具体实现解耦 - 代码结构简单
❌ 缺点: - 违反开闭原则(新增产品需修改工厂类) - 静态方法无法继承
定义一个创建对象的接口,但让子类决定实例化哪个类。
// 抽象工厂
interface Factory {
Product createProduct();
}
// 具体工厂A
class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂B
class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
// 客户端使用
public class Client {
public static void main(String[] args) {
Factory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.operation();
Factory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.operation();
}
}
[客户端] --> [抽象工厂]
[抽象工厂] <|-- [具体工厂A]
[抽象工厂] <|-- [具体工厂B]
提供一个接口,用于创建相关或依赖对象家族,而不需要明确指定具体类。
// 抽象产品族
interface Button {
void render();
}
interface Checkbox {
void check();
}
// 具体产品族1
class WindowsButton implements Button {
public void render() {
System.out.println("Windows风格按钮");
}
}
class WindowsCheckbox implements Checkbox {
public void check() {
System.out.println("Windows复选框选中");
}
}
// 具体产品族2
class MacButton implements Button {
public void render() {
System.out.println("Mac风格按钮");
}
}
// 抽象工厂
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
// 具体工厂实现
class WindowsFactory implements GUIFactory {
public Button createButton() {
return new WindowsButton();
}
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
class MacFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
// MacCheckbox实现省略...
}
对比维度 | 简单工厂 | 工厂方法 | 抽象工厂 |
---|---|---|---|
创建对象 | 单一产品 | 单一产品 | 产品族 |
扩展方式 | 修改工厂类 | 新增工厂子类 | 新增工厂子类 |
复杂度 | 简单 | 中等 | 复杂 |
典型应用场景 | 对象创建逻辑简单 | 需要灵活扩展产品 | 需要创建相关对象组 |
// BeanFactory就是典型的工厂接口
BeanFactory factory = new XmlBeanFactory(...);
Object obj = factory.getBean("beanName");
// Collection的iterator()方法
List<String> list = Arrays.asList("A", "B");
Iterator<String> it = list.iterator(); // 隐藏具体迭代器实现
工厂模式的核心价值在于: 1. 将对象创建与使用分离 2. 降低代码耦合度 3. 提高系统的可扩展性
在实际开发中,应根据业务复杂度选择合适的形式。简单场景用简单工厂,复杂产品族建议使用抽象工厂,大多数情况下工厂方法是最平衡的选择。 “`
(注:全文约1450字,可根据需要调整代码示例的详细程度)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。