首页 > 其他分享 >软件设计模式-生成器模式

软件设计模式-生成器模式

时间:2024-09-12 21:13:03浏览次数:8  
标签:String 软件设计 RAM 生成器 模式 Computer private CPU

生成器模式的结构
生成器(Builder):提供构建产品各部分的方法,一般是一步一步构建复杂对象的各个部分。
具体生成器(Concrete Builder):实现生成器接口,构建和装配具体的产品部件。
产品(Product):最终生成的复杂对象。
指挥者(Director):负责安排构建步骤,控制生成器构建对象的过程(可选)。
客户端(Client):通过生成器创建对象。
生成器模式的代码示例
假设我们需要创建一个 Computer 对象,该对象包含一些可选的属性,如 CPU、RAM、Storage 等。使用生成器模式,可以让客户端方便地创建带有不同属性的 Computer 实例。

示例:
java
复制代码
// 产品类:Computer
class Computer {
    // 必选参数
    private String CPU;
    private String RAM;
    // 可选参数
    private int storage;
    private boolean hasGraphicsCard;
    private String operatingSystem;
    
    // 私有构造函数,防止直接实例化
    private Computer(ComputerBuilder builder) {
        this.CPU = builder.CPU;
        this.RAM = builder.RAM;
        this.storage = builder.storage;
        this.hasGraphicsCard = builder.hasGraphicsCard;
        this.operatingSystem = builder.operatingSystem;
    }
    
    // 产品的展示方法
    public String toString() {
        return "Computer [CPU=" + CPU + ", RAM=" + RAM + ", Storage=" + storage +
               "GB, GraphicsCard=" + (hasGraphicsCard ? "Yes" : "No") +
               ", OS=" + operatingSystem + "]";
    }
    
    // 静态内部类:ComputerBuilder
    public static class ComputerBuilder {
        // 必选参数
        private String CPU;
        private String RAM;
        // 可选参数
        private int storage = 256;  // 默认256GB
        private boolean hasGraphicsCard = false;  // 默认无显卡
        private String operatingSystem = "Linux"; // 默认操作系统为Linux
        
        // 构造函数:必须传入必选参数
        public ComputerBuilder(String CPU, String RAM) {
            this.CPU = CPU;
            this.RAM = RAM;
        }
        
        // 可选参数的设置方法
        public ComputerBuilder setStorage(int storage) {
            this.storage = storage;
            return this;
        }
        
        public ComputerBuilder setGraphicsCard(boolean hasGraphicsCard) {
            this.hasGraphicsCard = hasGraphicsCard;
            return this;
        }
        
        public ComputerBuilder setOperatingSystem(String operatingSystem) {
            this.operatingSystem = operatingSystem;
            return this;
        }
        
        // 构建方法:返回最终产品
        public Computer build() {
            return new Computer(this);
        }
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        // 使用生成器模式构建不同的Computer对象
        Computer computer1 = new Computer.ComputerBuilder("Intel i7", "16GB")
                                    .setStorage(512)
                                    .setGraphicsCard(true)
                                    .setOperatingSystem("Windows 10")
                                    .build();
                                    
        Computer computer2 = new Computer.ComputerBuilder("AMD Ryzen 5", "8GB")
                                    .setStorage(256)
                                    .build();
        
        System.out.println(computer1);  // 输出 Computer [CPU=Intel i7, RAM=16GB, Storage=512GB, GraphicsCard=Yes, OS=Windows 10]
        System.out.println(computer2);  // 输出 Computer [CPU=AMD Ryzen 5, RAM=8GB, Storage=256GB, GraphicsCard=No, OS=Linux]
    }
}
生成器模式的特点
灵活的对象创建:通过链式调用,生成器模式允许根据需要设置对象的部分属性,而不是每次都传入所有参数。
不可变性:生成的 Computer 对象是不可变的,因为它的构造函数是 private,只能通过生成器创建,且不提供修改其属性的方法。
分步骤构建对象:可以按顺序调用不同的生成器方法,逐步构建对象的属性。
生成器模式与其他设计模式的对比
与工厂模式的区别:工厂模式用于一次性创建对象,适合简单的对象构建;生成器模式适用于复杂对象的分步骤创建

标签:String,软件设计,RAM,生成器,模式,Computer,private,CPU
From: https://www.cnblogs.com/torrentgz/p/18411113

相关文章

  • 软件模式-原型模式
    原型模式的核心思想原型模式的核心是使用一个原型接口来定义一个克隆方法,该方法允许对象自身进行复制。通过这个克隆方法,可以快速生成一个与原型对象相同的实例,而不需要直接创建新对象并手动设置属性。原型模式的结构原型接口(Prototype):定义一个clone()方法,用于克隆对象。具......
  • Java设计模式之责任链模式详细讲解和案例示范
    在本文中,我们将详细讲解Java设计模式中的责任链模式,探讨其基本概念、使用场景、常见问题和解决方式。同时,我们还会介绍责任链模式与策略模式的区别,并结合电商交易系统的示例进行说明。此外,我们还会探讨责任链模式在开源框架中的应用。1.责任链模式概述责任链模式是一种行......
  • 两种消息传递模式:发布订阅模式,排队模式
    Kafka是一种分布式流处理平台,支持多种消息传递模式,其中最主要的两种模式是发布-订阅(Pub-Sub)和排队(Queueing)。具体来说,Kafka的设计和实现允许它灵活地支持这两种模式。发布-订阅(Pub-Sub)模式在Kafka中,主题(Topic)是发布-订阅模式的核心概念:Producer(生产者)将消息发布到一个或多个......
  • 【软件设计师真题】下午题第二大题---数据库设计
    系列文章目录1.【软考之软件设计师】PPT课件2.【软考之软件设计师】学习笔记3.【软件设计师真题】下午题第一大题—数据流图设计4.【软件设计师真题】下午题第二大题—数据库设计5.【软件设计师真题】下午题第三大题—UML分析与设计6.【软件设计师真题】下午题......
  • 搭建线上扭蛋机小程序,企业新的盈利模式?
    近几年,随着市场对潮玩商品的需求不断增加,越来越多的资本入局到潮玩市场,因此,扭蛋机也开始在市场中持续走红,扭蛋机的各种创新玩法,也刺激着消费者的购买欲望,推动市场的发展。扭蛋机的目标群体主要是年轻人,具备较高的消费能力,同时当下年轻人的消费习惯主要集中于线上,这也为扭蛋机的转型......
  • Edge浏览器设置夜间模式/深色模式
    问题背景普通白色背景感觉有点刺眼,想改成深色背景,但是默认的设置里面只能修改边框的颜色:这里虽然设置界面和边框变成了黑色的,但是实际上打开网页还是白色的。全局配置在Edge浏览器打开edge://flags/,然后搜索DarkMode,从中选取对应的模式,可以直接Enable,我使用的配置为:配......
  • 我给四个AI图像生成器做了一个‘真实感测试’——结果让我大吃一惊
    根据What’stheBigData的数据,每天有超过340亿(没错,是B)AI图像被创造出来。市场的商品化如此严重,以至于许多AI图像生成器现在都是免费的。如果这些数字听起来疯狂,那是因为它们确实如此。尤其是当你记得这个市场在不到两年前才正式启动时。同时,这场狂欢对于全球用户来说是一大......
  • 信号发生器在扫描模式下输出正弦波信号,示波器呈现的波形显示异常与不理想,这是为什么
    如下图所示,在信号发生器扫描模式下输出正弦波信号,示波器呈现出的波形显示“异常”“不理想”情况,其原因可能与以下因素有关:1、扫描速度与示波器刷新率不匹配如果信号发生器的扫描速率(频率变化速度)与示波器的时间基准或刷新率不同步,示波器可能无法正确显示动态变化的频率信号......
  • 软件设计师中级(程序语言)
    目录一、程序设计语言概述1.低级语言与高级语言2.程序设计语言发展概述3.程序设计语言杂论4.程序设计语言的基本成分5.函数二、汇编、编译、解释1.汇编程序基本原理2.编译程序基本原理3.解释程序基本原理4.编译与解释比较三、文法分析1.正规式2.有限自动机3.上......
  • 57.C文件操作有关常用函数和模式整理
    为方便而有所整理数据文件分为文本文件二进制文件求速且生成文件较小则用二进制文件保存数据若要无须经过任何转换就可看到内容用文本文件保存数据FILE*gao=fopen("C:\\Users\\Desktop\\gao.txt","模式");fopen两个参数1个要打开文件的路径2打开的模式方式......