引言
在刚开始承接需求的时候,大多数的开发者都采用了一种平铺式的开发思路,从头到尾,一个方法就将需求实现啦,简单又快捷。殊不知后续的维护成为了头疼的事情,真是开发一时爽,后续维护火葬场。新增需求就成为打补丁的工作,慢慢的就成了人们说的s山代码。
作为有追求的开发者来说,提高自身面向对象编程的能力成为了补强的一个点。其中设计模式对于改造代码结构起着非常重要的作用,并且主流框架里面也很多地方采用了设计模式的地方,因此熟悉设计模式,对于自己的需求实现还是理解其他项目也起着非常重要的作用。今天来记录一下另一个简单的设计模式-工厂方法
工厂方法
属于创建型模式的一种。通过定义一个用于创建对象的接口,但让子类决定实例化哪一个类。对比简单工厂模式(优化代码结构-简单工厂模式),工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中违背开闭原则的问题,更好地支持了多态性和更复杂的对象创建逻辑。
代码实例如下:
/**
* @堆代码 duidaima.com
* @date 2024/6/2.
*/
public class FactoryMethod {
public static void main(String[] args) {
// 创建一个工厂
Factory factoryA = new FactoryA();
// 使用工厂创建产品
Product productA = factoryA.createProduct();
productA.info();
// 创建工厂B
Factory factoryB = new FactoryB();
//创建产品B
Product productB = factoryB.createProduct();
productB.info();
}
}
// 工厂接口
interface Factory {
Product createProduct();
}
// 具体工厂A
class FactoryA implements Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
// 具体工厂B
class FactoryB implements Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
// 产品接口
interface Product {
void info();
}
// 具体产品A
class ProductA implements Product {
@Override
public void info() {
System.out.println("产品信息:A");
}
}
//具体产品B
class ProductB implements Product {
@Override
public void info() {
System.out.println("产品信息:B");
}
}
代码解析:
• 接口 Factory:定义了一个创建产品对象的方法 createProduct(),这是一个工厂接口,所有的具体工厂类都需要实现这个接口。
• FactoryA 和 FactoryB:这两个类分别实现了 Factory 接口,并在 createProduct 方法中返回了不同类型的 Product 实例(ProductA 和 ProductB)。
• 接口 Product:定义了所有产品类需要实现的接口,这里只有一个方法 info(),用于输出产品的信息。
• 具体产品类 ProductA 和 ProductB:实现了 Product 接口,分别提供了 info 方法的具体实现,展示了不同产品的特性。
• main 方法中的客户端代码:展示了如何使用工厂方法模式。首先,创建了两个不同的工厂实例 FactoryA 和 FactoryB,然后通过这两个工厂分别创建了产品 ProductA 和 ProductB,并调用它们的 info 方法输出产品信息。
小结
这样,客户端代码不需要直接关注产品的具体创建过程,降低了模块间的耦合度,增加了系统的可扩展性和灵活性。