【设计模式专题之工厂方法模式】2.积木工厂

时间限制:1.000S 空间限制:256MB

题目描述

小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。

输入描述

输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示生产的次数。

接下来的 N 行,每行输入一个字符串和一个整数,字符串表示积木的类型。积木类型分为 "Circle" 和 "Square" 两种。整数表示该积木生产的数量

输出描述

对于每个积木,输出一行字符串表示该积木的信息。

输入示例
复制代码
3
Circle 1
Square 2
Circle 1
输出示例
复制代码
Circle Block
Square Block
Square Block
Circle Block
提示信息

在示例中,积木工厂生产了3块积木,其中有2块是圆形积木,1块是方形积木。根据输入的类型,每块积木的信息被输出到控制台。

java 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 抽象积木接口
interface Block {
    void produce();
}

// 具体圆形积木实现
class CircleBlock implements Block {

    @Override
    public void produce() {
        System.out.println("Circle Block");
    }
}

// 具体方形积木实现
class SquareBlock implements Block {

    @Override
    public void produce() {
        System.out.println("Square Block");
    }
}

// 抽象积木工厂接口
interface BlockFactory {
    Block createBlock();
}

// 具体圆形积木工厂实现
class CircleBlockFactory implements BlockFactory {

    @Override
    public Block createBlock() {
        return new CircleBlock();
    }
}

// 具体方形积木工厂实现
class SquareBlockFactory implements BlockFactory {
    @Override
    public Block createBlock() {
        return new SquareBlock();
    }
}

// 积木工厂系统
class BlockFactorySystem {
    // 添加产品
    private List<Block> blocks = new ArrayList<>();

    // 创建产品
    public void produceBlocks(BlockFactory factory, int quantity) {
        for (int i = 0; i < quantity; i++) {
            Block block = factory.createBlock();
            // 将产品加入集合
            blocks.add(block);
            // 创建产品
            block.produce();
        }
    }

    public List<Block> getBlocks() {
        return blocks;
    }

}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 创建积木工厂系统
        BlockFactorySystem blockFactorySystem = new BlockFactorySystem();
        // 读取生产次数
        int productCount = sc.nextInt();
        for (int i = 0; i < productCount; i++) {
            String blockType = sc.next();
            int quantity = sc.nextInt();
            if (blockType.equals("Circle")){
                blockFactorySystem.produceBlocks(new CircleBlockFactory(),quantity);
            } else if (blockType.equals("Square")){
                blockFactorySystem.produceBlocks(new SquareBlockFactory(),quantity);
            }
        }
    }
}
相关推荐
JavaGuide41 分钟前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户37215742613542 分钟前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源43 分钟前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
CoovallyAIHub1 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
Java中文社群1 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心2 小时前
从零开始学Flink:数据源
java·大数据·后端·flink
间彧2 小时前
Spring Boot项目中如何自定义线程池
java
间彧2 小时前
Java线程池详解与实战指南
java
用户298698530142 小时前
Java 使用 Spire.PDF 将PDF文档转换为Word格式
java·后端
NAGNIP2 小时前
Serverless 架构下的大模型框架落地实践
算法·架构