工厂方法模式是一种创建型设计模式,用于定义一个产品的接口,让子类决定实例化哪一个类,它包括以下三种类型:,1. 简单工厂:只提供一个静态方法来创建产品类的实例。,2. 工厂方法:在父类中定义一个或多个工厂方法,子类通过调用这些方法来创建产品类的实例。,3. 抽象工厂:不提供具体的产品类,而是定义一个接口来表示产品,并让子类实现这个接口来创建具体产品类的实例。
工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种用于创建对象的机制,在工厂模式中,我们可以定义一个创建对象的接口,但允许子类决定要实例化的类是哪一个,这样,我们就可以通过调用工厂方法来创建对象,而不需要指定具体类,工厂模式通常包括以下三个角色:
- 具体产品(Concrete Product):实现抽象产品接口,提供具体的产品类及其工厂方法的实现。
- 客户端(Client):使用抽象产品接口来请求产品实例,并指定具体的产品类。
以下是一个简单的工厂模式示例,演示了如何创建一个Book
和Author
的工厂,以及客户端如何使用这些工厂来创建Book
和Author
对象。
// 抽象产品 - Book public interface Book { void read(); } // 具体产品 - ConcreteProduct - Implementing the Abstract Product class HardcoverBook implements Book { @Override public void read() { System.out.println("Reading a hardcover book"); } } class PaperbackBook implements Book { @Override public void read() { System.out.println("Reading a paperback book"); } } // 抽象产品 - Author public interface Author { void write(); } // 具体产品 - ConcreteProduct - Implementing the Abstract Product class JohnDoe implements Author { @Override public void write() { System.out.println("John Doe writes books"); } } // 客户端 - Main Class public class Main { public static void main(String[] args) { // 使用具体产品创建对象 Book hardcoverBook = new HardcoverBook(); hardcoverBook.read(); // Should print: Reading a hardcover book Book paperbackBook = new PaperbackBook(); paperbackBook.read(); // Should print: Reading a paperback book Author johnDoe = new JohnDoe(); johnDoe.write(); // Should print: John Doe writes books } }
在这个示例中,我们定义了两个产品类Book
和Author
,它们都实现了相同的read
和write
方法,我们定义了两个具体的产品实现类HardcoverBook
和PaperbackBook
,它们分别实现了Book
接口,我们定义了两个具体产品实现类JohnDoe
和JohnDoe
,它们分别实现了Author
接口。
在客户端代码中,我们使用具体的产品实现类创建了Book
和Author
对象,这样,我们就不需要知道具体的类名,只需要知道产品接口即可,这种灵活性使得工厂模式非常适用于创建复杂对象的场景。