设计模式从入门到精通之(一)工厂模式

发布于:2024-12-18 ⋅ 阅读:(112) ⋅ 点赞:(0)

工厂模式:为每个工厂找到"生意经"

在现实生活中,我们随处可见"工厂"的影子,比如汽车工厂生产汽车,食品工厂生产食品。但你有没有想过,为什么我们需要工厂?如果没有工厂,我们自己能不能搞定这些生产?今天,我们就用现实中的例子来引入软件设计中的工厂模式

1. 什么是工厂模式?

工厂模式(Factory Pattern)是一种创建型设计模式,它通过为对象的创建提供一种统一的接口,来隐藏实例化的具体逻辑。简单来说,工厂模式就像一台机器,它为你定制化地生产出想要的东西,而不需要你自己动手去捣鼓具体的制作过程。

在代码世界里,工厂模式能够帮助我们解决"简单对象创建"变成"复杂耦合代码"的问题,减少维护难度。

2. 用现实中的故事引出工厂模式

假设你是一名咖啡爱好者,每天早晨都需要喝一杯咖啡来提神。家里有各种原材料,比如咖啡豆、牛奶、糖等等。但是如果让你每天一大早起来,自己磨豆、煮咖啡、打奶泡,是不是感觉太麻烦?如果有一家咖啡店帮你制作出各种类型的咖啡,比如美式、拿铁、卡布奇诺,你只需要说出你想喝的咖啡名称就行,岂不是省时省力?

这家咖啡店就是一个工厂,它屏蔽了制作过程的复杂性,让你通过简单的请求(咖啡名称),得到想要的结果(咖啡)。

3. 工厂模式的代码实现

我们用代码来模拟这个场景,看看如何用工厂模式来制作咖啡。

3.1 咖啡类

每种咖啡都有自己的特点,我们用不同的类来表示。

// 定义咖啡的抽象类
abstract class Coffee {
    public abstract String getName();

    public void prepare() {
        System.out.println("Preparing ingredients for " + getName());
    }
}

// 美式咖啡
class AmericanCoffee extends Coffee {
    @Override
    public String getName() {
        return "American Coffee";
    }
}

// 拿铁咖啡
class LatteCoffee extends Coffee {
    @Override
    public String getName() {
        return "Latte Coffee";
    }
}

3.2 咖啡工厂

为了屏蔽咖啡的具体制作细节,我们创建一个咖啡工厂。

class CoffeeFactory {
    public static Coffee createCoffee(String type) {
        if ("American".equalsIgnoreCase(type)) {
            return new AmericanCoffee();
        } else if ("Latte".equalsIgnoreCase(type)) {
            return new LatteCoffee();
        } else {
            throw new IllegalArgumentException("Unknown coffee type: " + type);
        }
    }
}

3.3 客户端代码

客户端只需要和工厂交互,就可以获取不同种类的咖啡,而不用关心咖啡是怎么制作的。

public class CoffeeShop {
    public static void main(String[] args) {
        Coffee american = CoffeeFactory.createCoffee("American");
        american.prepare();

        Coffee latte = CoffeeFactory.createCoffee("Latte");
        latte.prepare();
    }
}

运行结果:

Preparing ingredients for American Coffee
Preparing ingredients for Latte Coffee

4. 工厂模式的优缺点

优点:

    1. 解耦:客户端与具体产品类解耦,新增产品时只需要修改工厂类。
    1. 高内聚:对象创建的逻辑集中在工厂中,代码更清晰。

缺点:

    1. 工厂类的职责可能会变得过重,容易违背单一职责原则。
    1. 每增加一种新产品,都需要修改工厂类代码,违反开闭原则(这可以通过工厂方法模式改进)。

5. 总结

工厂模式是最常用的设计模式之一,它的核心思想就是将创建对象的逻辑集中管理,减少代码中的重复和耦合。通过咖啡店的例子,我们可以更容易理解工厂模式的用途。

在未来的专栏中,我们还会讲解其他设计模式,比如单例模式可以确保一杯咖啡只做一份,而装饰器模式可以为你的咖啡添加额外的配料。每一种设计模式,就像现实世界中的一套工具,帮助你更高效地构建程序。

思考问题:
如果你想扩展工厂模式,比如支持更多种类的咖啡(比如卡布奇诺),你会如何设计?欢迎在评论区分享你的看法!


网站公告

今日签到

点亮在社区的每一天
去签到