软考77-上午题-【面向对象技术3-设计模式】-创建型设计模式02

news2024/11/15 15:31:41

一、生成器模式

1-1、意图

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

1-2、结构图

  • Builder 为创建一个 Product 对象的各个部件指定抽象接口。
  • ConcreteBuilder 实现 Builder 的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,提供一个检索产品的接口。
  • Director 构造一个使用 Builder 接口的对象。
  • Product 表示被构造的复杂对象。
  • ConcreteBuilder 创建该产品的内部表示并定义它的装配过程。包含定义组成组件的类,包括将这些组件装配成最终产品的接口。

1-3、代码表示

1-4、适用性

创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

当构造过程必须允许被构造的对象有不同的表示时。

1-5、真题

真题1:

真题2:

真题3:

二、原型模式

上午题没怎么考过,考下午题。

2-1、意图

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

2-2、结构图

  • Prototype 声明一个复制自身的接口。
  • ConcretePrototype 实现一个复制自身的操作。
  • Client 让一个原型复制自身从而创建一个新的对象。

2-3、代码表示

抽象原型:

interface ProtoType {
    public Object Clone();
}

具体原型:

package Design23;

public class Product implements ProtoType{
    private int id;
    private double price;

    public Product(){}

    public Product(int id, double price){
        this.id = id;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public Object Clone() {
        Product product = new Product();
        product.id = this.id;
        product.price = this.price;

        return product;
    }
}

 

客户端:

java中已经提供了一个克隆的接口:

package Design23;

public class Product implements Cloneable{
    private int id;
    private double price;

    public Product(){}

    public Product(int id, double price){
        this.id = id;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

 

2-4、适用性

  • 当一个系统应该独立于它的产品创建、构成和表示时。
  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载。
  • 为了避免创建一个与产品类层次平行的工厂类层次时。
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。

三、单例模式 

只考上午题。

 

3-1、意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

3-2、结构图

 

3-3、代码实现

package Design23;

public class Singleton {

    private int number = 2024;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    // 创建一个唯一的实例
    static Singleton instance = new Singleton();

    // public Singleton(){}
    private Singleton(){}

    // 访问它的全局访问点
    public static Singleton getInstance(){
        return instance;
    }

}
public class SingletonMain {

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();

        System.out.println(singleton1.getNumber() + " " + singleton2.getNumber());

        singleton1.setNumber(22);
        System.out.println(singleton1.getNumber() + " " + singleton2.getNumber());
    }

}

 

3-4、适用性

当类只能有一个实例而且客户可以从众所周知的访问点访问它时。

当这个唯一实例应该是通过子类化可扩展的,并且客户无须更改代码就能使用一个扩展的实例时。

3-5、真题

真题1:

真题2:

真题3:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Acwing-基础算法课笔记之动态规划(背包问题)

Acwing-基础算法课笔记之动态规划(背包问题) 一、01背包问题1、概述2、过程模拟 二、完全背包问题1、概述2、闫氏dp分析完全背包问题3、过程模拟代码模板 三、多重背包问题1、概述2、过程模拟3、多重背包问题的优化版本 分组背包问题1、概述2、过程模拟3…

GCNv2_SLAM-CPU详细安装教程(ubuntu18.04)

GCNv2_SLAM-CPU详细安装教程-ubuntu18.04 前言一、安装第三方库1.安装Pangolin2.安装OpenCV3.安装Eigen4.安装Pytorch(c) 二、安装以及运行GCNv2_SLAM1.安装编译GCNv2_SLAM2.单目模式运行演示案例 总结 前言 paper:https://arxiv.org/pdf/1902.11046.pdf githup::https://gith…

mysql事务(MVCC机制:undo日志)(mysql执行过程:redo日志,Buffer Pool缓存池)

事务 目的:保证数据的最终一致性## 事务的目的 事务的4大特性(ACID) 1.原子性(Atomicity):由undo log日志来保证 2.一致性(Consistency):使用事务的最终目的,由业务代码正确逻辑保证,比如错误的try-catch 3.隔离性(Isolation):…

若依Vue3图片预览大图遮罩层和表格的border css层级冲突

样式层级出现问题,表格的层级高于图片的层级 1.解决方式一:设置此文件的该属性(z-index)为继承,则显示正常 .el-table .el-table__cell { z-index: inherit; } 2.解决方式二:将此属性设置为true(本人试了…

Vscode 修改C++版本

1. 首先要检查GCC版本,有的gcc版本过低会导致C版本升级不成功 可以用cmd,用gcc --version命令查看gcc版本 我这里就是gcc版本较低,不支持c17 需要先升级gcc版本 gcc与c对应的版本,大家可以在这位大佬的博客中看,写…

闯关升级游戏特点,闯关小程序游戏开发

闯关升级类游戏一直以来都备受玩家青睐,其独特的游戏性和吸引力让人们乐此不疲。这类游戏以挑战性关卡和角色成长为核心,让玩家在不断的冒险中获得成就感与乐趣。让我们一起深入探讨这类游戏的特点,以及为何它们如此受欢迎。 挑战性关卡设计…

FPGA - 串口发送多字节数据

1,任务要求 关于uart串口接收与发送可以参考我的这篇博客:《FPGA-UART串口》。这篇博客实现了单字节发送与接收。 接下来,来使用串口发送多字节数据到电脑。 2,模块框图以及简单时序分析图 串口发送多字节数据的思路是把写入的…

Windows提示“无法删除文件:无法读源文件或磁盘”怎么办?

当用户在Mac电脑上创建一个文件,又将文件共享到Windows系统后,该文件可能无法被Windows正常识别和使用,并且在删除时出现“无法删除文件:无法读源文件或磁盘”的提示,这可能和Windows不支持Mac电脑创建的某些文件名有关…

Jmeter扩展开发--自定义java取样器

简介 jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。但在某些特殊情况下,还是希望能做自定义压测处理,此时就涉及Jmeter的扩展开发自定义Java取样器,如下图所示&#…

基于物联网的智能家居监测与控制系统(全套资料)

项目源码资料下载地址: http://comingit.cn/?id29 易学蔚来全套毕设演示(看上哪个选那个): https://www.yuque.com/javagongchengshi/ccadbu/nh92kcpyqodhf07l 毕设服务真实反馈,在线观看: https://www.yu…

opencv中的图像高斯模糊—GaussianBlur

高斯模糊(Gaussian Blur)是一种广泛应用于图像处理的平滑技术,其通过对图像应用高斯函数来减少图像噪声和细节。与简单平均模糊(均值滤波)不同,高斯模糊给予中心像素更高的权重,而远离中心的像素…

介绍Oracle的SQL调化健康检查脚本(SQLHC)

概述 Oracle提供了一个SQL调优健康检查脚本(SQLHC),用于检查需要优化的SQL的运行环境,生成报告以便帮助DBA找到SQL性能不佳的原因。SQLHC是SQLT的一个子集(我后续的文章会介绍SQLT),但SQLHC与S…

#微信小程序(一个emo文案界面)

1.IDE:微信开发者工具 2.实验:一个emo文案界面 (1)最好使用rpx (2)图片宽度占不满,在CSS中设置width为100% (3)imag图片全部为网页链接图片 3.记录 4.代码 index.htm…

sqllab第二十关通关笔记

知识点: cookie注入 可以进行url解析错误注入传参位置 get请求post请求cookie传参 输入admin admin进行登录,抓取当前数据包 通过放包发现是一个302跳转的响应包,页面只有一个 I Love Cookies;没什么信息 通过点击页面上方的按钮…

Linux搭建FTP服务器

一、概念简介 vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件,本次实验介绍如何在Linux上安装并配置vsftpd。 FTP(File Transfer Protocol)是一种文件传输协议,基于客户…

vue antd table嵌套表格 左侧展开图标动态控制显示隐藏

antd a-table想要实现如以下效果&#xff0c;有子级就显示展开图标&#xff0c;没有就不显示图标&#xff1a; 话不多说&#xff0c;直接上代码&#xff1a; <template><a-table :columns"columns" :data-source"dataSource"><template #b…

电机参数辨识算法(1)——基于高频注入的电感辨识策略

今天将开启参数辨识的第一期。通过复现论文来学习电机参数在线辨识的方法。我会尽可能讲述我在仿真遇到的问题以及解决办法。 1.文章内容介绍 参考文献如下&#xff1a; 这篇文章的复现估计要分为几个部分&#xff0c;电感辨识、电阻辨识、磁链辨识。 文章是以无差拍预测电流…

【MySQL】MySQL主从复制

目录 技术背景数据库架构演变1.单机MySQL数据库的美好年代2.Memcached(缓存)MySQL3.主从复制&#xff1a;读写分离4.垂直拆分业务数据5.分库分表 结论——生产环境的MySQL架构 什么是主从复制作用读写分离一主多从 应用场景原理解析MySQL主从复制工作方式master 记录二进制日志…

提升零售行业竞争力的信息抽取技术应用与实践

一、引言 在当今快速发展的零售行业中&#xff0c;沃尔玛、家乐福等大型连锁超市为消费者提供了丰富的日常食品和日用品。为了进一步提升客户体验和优化库存管理&#xff0c;这些零售巨头纷纷开始探索和应用先进的信息抽取技术。 本文将深入探讨一个成功的信息抽取项目&#…

vue iview 级联选择器遇到的坑

我们PC项目用到的前端技术栈是vue+iview,最近有个需求,要做个级联选择器,并且是懒加载动态加载后端返回的数据。效果如下: 如下图所示,在我们封装的公共组件form-box.vue里有我们级联选择器: 代码如下: <!--级联选择器--><template v-else-if="item.type…