工厂方法模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种统一的接口来创建对象,但将对象的实例化延迟到子类中。工厂模式主要解决了对象的创建过程与使用客户端代码的解耦,使得客户端代码不需要知道具体的对象创建细节,只需要通过工厂接口来获取所需的对象。

工厂模式包含三种常见的实现方式:

  1. 简单工厂模式(Simple Factory Pattern):由一个工厂类根据传入的参数来决定创建哪一种产品类的实例。简单工厂模式不符合开闭原则,因为新增产品时需要修改工厂类的代码。
  2. 工厂方法模式(Factory Method Pattern):将具体产品的创建交给子类工厂来实现,每个具体产品对应一个具体工厂。工厂方法模式符合开闭原则,新增产品时只需要添加相应的产品类和工厂类即可。
  3. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建一组相关或相互依赖的产品对象,每个具体工厂类实现接口来创建一组具体产品。抽象工厂模式用于创建一族产品,而工厂方法模式用于创建单一产品。
    示例:
    假设我们要创建不同类型的电视机和手机产品,使用工厂模式来实现:
java 复制代码
// 产品接口:电视机
interface TV {
    void display();
}

// 具体产品:Sony电视机
class SonyTV implements TV {
    @Override
    public void display() {
        System.out.println("Sony电视机");
    }
}

// 具体产品:Samsung电视机
class SamsungTV implements TV {
    @Override
    public void display() {
        System.out.println("Samsung电视机");
    }
}

// 产品接口:手机
interface Phone {
    void call();
}

// 具体产品:iPhone手机
class iPhone implements Phone {
    @Override
    public void call() {
        System.out.println("iPhone手机");
    }
}

// 具体产品:华为手机
class Huawei implements Phone {
    @Override
    public void call() {
        System.out.println("华为手机");
    }
}

// 工厂接口:电器工厂
interface ApplianceFactory {
    TV createTV();
    Phone createPhone();
}

// 具体工厂:Sony电器工厂
class SonyApplianceFactory implements ApplianceFactory {
    @Override
    public TV createTV() {
        return new SonyTV();
    }

    @Override
    public Phone createPhone() {
        return new iPhone();
    }
}

// 具体工厂:Samsung电器工厂
class SamsungApplianceFactory implements ApplianceFactory {
    @Override
    public TV createTV() {
        return new SamsungTV();
    }

    @Override
    public Phone createPhone() {
        return new Huawei();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 使用Sony电器工厂创建产品
        ApplianceFactory sonyFactory = new SonyApplianceFactory();
        TV sonyTV = sonyFactory.createTV();
        Phone iPhone = sonyFactory.createPhone();

        sonyTV.display(); // 输出:Sony电视机
        iPhone.call();    // 输出:iPhone手机

        // 使用Samsung电器工厂创建产品
        ApplianceFactory samsungFactory = new SamsungApplianceFactory();
        TV samsungTV = samsungFactory.createTV();
        Phone huaweiPhone = samsungFactory.createPhone();

        samsungTV.display(); // 输出:Samsung电视机
        huaweiPhone.call();  // 输出:华为手机
    }
}
相关推荐
寻星探路10 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
程序员小白条10 小时前
面试 Java 基础八股文十问十答第八期
java·开发语言·数据库·spring·面试·职场和发展·毕设
萤丰信息10 小时前
从 “钢筋水泥” 到 “数字神经元”:北京 AI 原点社区重构城市进化新逻辑
java·大数据·人工智能·安全·重构·智慧城市·智慧园区
week_泽11 小时前
第5课:短期记忆与长期记忆原理 - 学习笔记_5
java·笔记·学习·ai agent
像风一样自由11 小时前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
兮动人11 小时前
Maven指定加载的类
java·maven·maven指定加载的类
wangkay8812 小时前
【Java 转运营】Day04:抖音新号起号前准备全指南
java·开发语言·新媒体运营
亲爱的非洲野猪12 小时前
Java线程池深度解析:从原理到最佳实践
java·网络·python
亲爱的非洲野猪12 小时前
深入解析享元模式:用Java实现高性能对象复用
java·开发语言·享元模式
qq_4017004112 小时前
Qt 事件处理机制
java·数据库·qt