工厂方法模式
1.描述
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将具体的实例化工作延迟到子类中。这样客户端代码在不需要知道具体产品的情况下就能够创建产品。
工厂方法模式包含以下几个关键角色:
- 抽象产品(Product):定义了产品的通用接口,具体的产品类将实现这个接口。
- 具体产品(Concrete Product):实现了抽象产品接口的具体产品类。
- 抽象工厂(Factory):定义了创建产品的工厂方法的接口,可以是接口或者抽象类。
- 具体工厂(Concrete Factory):实现了抽象工厂接口的具体工厂类,在其中实现了创建具体产品的方法。
2.代码实例
Product 抽象产品接口
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:02:17
*/
public interface Product {
void operation();
}
ConcreteProductA 具体产品A
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:03:36
*/// 具体产品类A
public class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("具体产品A的操作");
}
}
ConcreteProductB 具体产品B
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:03:39
*/// 具体产品类B
public class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("具体产品B的操作");
}
}
Factory 抽象工厂接口
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:03:54
*/// 抽象工厂接口
public interface Factory {
Product createProduct();
}
ConcreteFactoryA 具体工厂A
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:04:25
*/// 具体工厂类A,用于创建具体产品A
public class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
ConcreteFactoryB 具体工厂B
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:04:36
*/// 具体工厂类B,用于创建具体产品B
public class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
测试类
package FactoryMethod;
/**
* @author ZhenFrank
* @date 2024-03-02 12:05:29
*/
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();
}
}
/**
* 工厂方法
* 创建各自相对应产品的专属工厂
* 实例化工厂获取产品对象
*/
3.工厂方法模式学习总结
工厂方法模式是一种常用的创建型设计模式,它通过定义一个用于创建对象的接口,但将具体的实例化工作延迟到子类中,从而使得客户端代码不需要知道具体产品的创建过程,只需要通过工厂来创建产品对象。