【设计模式】工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
发布人:shili8
发布时间:2024-12-24 19:51
阅读次数:0
**工厂方法模式**
工厂方法模式是一种创建型设计模式,它定义了一个接口或抽象类,让子类决定如何创建对象。
### 简介工厂方法模式的主要目的是隔离具体产品的创建逻辑,使得客户端代码与具体产品的实现细节解耦。这种模式通过提供一个用于创建对象的公共接口,来使得系统更具扩展性和灵活性。
### 适用场景工厂方法模式适用于以下场景:
* 需要创建多种不同类型的对象时。
* 需要隔离具体产品的创建逻辑,使得客户端代码与具体产品的实现细节解耦。
* 需要增加系统的扩展性和灵活性。
###优缺点**优点**
* **解耦**:工厂方法模式可以使得客户端代码与具体产品的实现细节解耦。
* **扩展性**:工厂方法模式可以方便地增加新的产品类型。
* **灵活性**:工厂方法模式可以根据需要改变创建对象的逻辑。
**缺点**
* **复杂度**:工厂方法模式可能会增加系统的复杂度,因为它需要定义一个用于创建对象的公共接口。
* **依赖关系**:工厂方法模式可能会引入新的依赖关系,因为客户端代码需要依赖于工厂类。
###代码示例下面是一个简单的例子,演示了如何使用工厂方法模式来创建不同类型的汽车:
java// 抽象产品类:汽车public abstract class Car { public abstract void move(); } // 具体产品类:奔驰public class Benz extends Car { @Override public void move() { System.out.println("Benz is moving..."); } } // 具体产品类:宝马public class BMW extends Car { @Override public void move() { System.out.println("BMW is moving..."); } } // 工厂接口public interface CarFactory { Car createCar(); } // 具体工厂类:奔驰工厂public class BenzFactory implements CarFactory { @Override public Car createCar() { return new Benz(); } } // 具体工厂类:宝马工厂public class BMWFactory implements CarFactory { @Override public Car createCar() { return new BMW(); } } public class Main { public static void main(String[] args) { // 使用工厂方法模式创建汽车 Car benz = new BenzFactory().createCar(); Car bmw = new BMWFactory().createCar(); // 使用汽车 benz.move(); // 输出:Benz is moving... bmw.move(); // 输出:BMW is moving... } }
在这个例子中,我们定义了一个抽象产品类 `Car`,以及两个具体产品类 `Benz` 和 `BMW`。我们还定义了一个工厂接口 `CarFactory`,以及两个具体工厂类 `BenzFactory` 和 `BMWFactory`。
客户端代码可以使用工厂方法模式来创建不同类型的汽车:
java// 使用工厂方法模式创建汽车Car benz = new BenzFactory().createCar(); Car bmw = new BMWFactory().createCar(); // 使用汽车benz.move(); // 输出:Benz is moving... bmw.move(); // 输出:BMW is moving...
这种设计使得客户端代码与具体产品的实现细节解耦,增加了系统的扩展性和灵活性。