工厂方法模式和抽象工厂

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

成员包含:

(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();
    }
}
相关推荐
禾小西3 分钟前
性能测试后的瓶颈定位与调优:自下而上找问题,自上而下解难题
java·测试工具
建军啊8 分钟前
java审计进阶
java·开发语言·python
2401_8896269210 分钟前
Java流程控制与方法全解析
java·开发语言
花千树-01011 分钟前
5分钟用 Java 构建你的第一个 AI 应用
java·人工智能·spring boot·langchain·aigc·ai编程
码界筑梦坊12 分钟前
329-基于Python的交通流量数据可视化分析系统
开发语言·python·信息可视化·数据分析·django·vue·毕业设计
yong999016 分钟前
带挂载的四轴飞行器模型预测控制(MPC) MATLAB实现
开发语言·matlab
报错小能手20 分钟前
ios开发方向——对于实习开发的app(Robopocket)讲解
开发语言·学习·ios·swift
wjs202422 分钟前
Swift 方法
开发语言
计算机安禾27 分钟前
【数据结构与算法】第18篇:数组的压缩存储:对称矩阵、三角矩阵与稀疏矩阵
c语言·开发语言·数据结构·c++·线性代数·算法·矩阵
pedestrian_h29 分钟前
Java单例模式回顾
java·单例模式·设计模式