工厂方法模式和抽象工厂

工厂方法模式的核心思想就是为每种产品定义一个创建工厂方法的工厂类,核心就是面向接口编程

成员包含:

(1)产品接口,工厂接口

(2)产品实现类,工厂实现类

csharp 复制代码
产品接口和具体产品类
// 产品接口
interface Product {
    void use();
}

// 具体产品A
class ProductA implements Product {
    @Override
    public void use() {
        System.out.println("Using ProductA");
    }
}

// 具体产品B
class ProductB implements Product {
    @Override
    public void use() {
        System.out.println("Using ProductB");
    }
}
工厂接口和具体工厂类

// 工厂接口
abstract class ProductFactory {
    public abstract Product createProduct();
}

// 具体工厂A,负责创建ProductA
class ProductAFactory extends ProductFactory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

// 具体工厂B,负责创建ProductB
class ProductBFactory extends ProductFactory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}
客户端代码

public class Client {
    public static void main(String[] args) {
        // 使用工厂A创建产品A
        ProductFactory factoryA = new ProductAFactory();
        Product productA = factoryA.createProduct();
        productA.use(); // 输出:Using ProductA

        // 使用工厂B创建产品B
        ProductFactory factoryB = new ProductBFactory();
        Product productB = factoryB.createProduct();
        productB.use(); // 输出:Using ProductB
    }
}

抽象工厂:和工厂方法模式相似,只是多了产品族这个概念

抽象工厂模式是用于创建一系列相关或相互依赖的对象,这个模式强调的是"产品族"的概念

如下,一个工厂实现,可以创建多个相同产品族的产品。

csharp 复制代码
// 抽象产品接口 - Chair
interface Chair {
    void sitOn();
}

// 抽象产品接口 - Table
interface Table {
    void placeOn();
}

// 具体产品 - Victorian Chair
class VictorianChair implements Chair {
    @Override
    public void sitOn() {
        System.out.println("Sitting on a Victorian chair.");
    }
}

// 具体产品 - Modern Chair
class ModernChair implements Chair {
    @Override
    public void sitOn() {
        System.out.println("Sitting on a modern chair.");
    }
}

// 具体产品 - Victorian Table
class VictorianTable implements Table {
    @Override
    public void placeOn() {
        System.out.println("Placing on a Victorian table.");
    }
}

// 具体产品 - Modern Table
class ModernTable implements Table {
    @Override
    public void placeOn() {
        System.out.println("Placing on a modern table.");
    }
}

// 抽象工厂接口
interface FurnitureFactory {
    Chair createChair();
    Table createTable();
}

// 具体工厂 - Victorian Furniture Factory
class VictorianFurnitureFactory implements FurnitureFactory {
    @Override
    public Chair createChair() {
        return new VictorianChair();
    }

    @Override
    public Table createTable() {
        return new VictorianTable();
    }
}

// 具体工厂 - Modern Furniture Factory
class ModernFurnitureFactory implements FurnitureFactory {
    @Override
    public Chair createChair() {
        return new ModernChair();
    }

    @Override
    public Table createTable() {
        return new ModernTable();
    }
}
相关推荐
微风中的麦穗8 小时前
【MATLAB】MATLAB R2025a 详细下载安装图文指南:下一代科学计算与工程仿真平台
开发语言·matlab·开发工具·工程仿真·matlab r2025a·matlab r2025·科学计算与工程仿真
2601_949146538 小时前
C语言语音通知API示例代码:基于标准C的语音接口开发与底层调用实践
c语言·开发语言
开源技术8 小时前
Python Pillow 优化,打开和保存速度最快提高14倍
开发语言·python·pillow
学嵌入式的小杨同学8 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
毕设源码-朱学姐8 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
mftang9 小时前
Python 字符串拼接成字节详解
开发语言·python
jasligea10 小时前
构建个人智能助手
开发语言·python·自然语言处理
kokunka10 小时前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
C雨后彩虹10 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
云栖梦泽11 小时前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言