• 设计模式中的工厂方法
  • 发布于 2个月前
  • 271 热度
    0 评论
引言
在刚开始承接需求的时候,大多数的开发者都采用了一种平铺式的开发思路,从头到尾,一个方法就将需求实现啦,简单又快捷。殊不知后续的维护成为了头疼的事情,真是开发一时爽,后续维护火葬场。新增需求就成为打补丁的工作,慢慢的就成了人们说的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 方法输出产品信息。

小结
这样,客户端代码不需要直接关注产品的具体创建过程,降低了模块间的耦合度,增加了系统的可扩展性和灵活性。
用户评论