工厂方法模式和抽象工厂

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

成员包含:
(1)产品接口,工厂接口
(2)产品实现类,工厂实现类

产品接口和具体产品类
// 产品接口
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
    }
}

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

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

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

// 抽象产品接口 - 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();
    }
}

相关推荐

  1. 工厂方法模式抽象工厂

    2024-06-15 22:24:04       26 阅读
  2. 简单工厂工厂方法抽象工厂策略模式

    2024-06-15 22:24:04       57 阅读
  3. 抽象工厂模式工厂方法(简单工厂)的区别

    2024-06-15 22:24:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-15 22:24:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-15 22:24:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-15 22:24:04       87 阅读
  4. Python语言-面向对象

    2024-06-15 22:24:04       96 阅读

热门阅读

  1. Python字典基本用法

    2024-06-15 22:24:04       28 阅读
  2. odoo16 档案管理中的视频档案的上传与播放

    2024-06-15 22:24:04       23 阅读
  3. 企业开源免费和开源的堡垒机选型方案

    2024-06-15 22:24:04       25 阅读
  4. 计算机类期刊含金量横纵向对比(二)

    2024-06-15 22:24:04       36 阅读
  5. ubuntu20.0.4下安装PyTorch

    2024-06-15 22:24:04       31 阅读
  6. 钉钉Stream模式推送程序环境部署

    2024-06-15 22:24:04       28 阅读
  7. 图神经网络工具篇

    2024-06-15 22:24:04       26 阅读
  8. C#多线程与函数对象的实例

    2024-06-15 22:24:04       22 阅读