当前位置: 首页 > news >正文

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

一、生成器模式

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;}@Overridepublic 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;}@Overridepublic 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.lryc.cn/news/318063.html

相关文章:

  • 微博热搜榜单采集,微博热搜榜单爬虫,微博热搜榜单解析,完整代码(话题榜+热搜榜+文娱榜和要闻榜)
  • 有趣的前端知识(三)
  • How to install teams in ubuntu
  • macOS14.4安装FFmpeg及编译FFmpeg源码
  • 基于Springboot+vue+mybatis框架的建材运营管理系统的设计与实现【附项目源码】分享
  • 前端路由跳转bug
  • 二 centos 7.9 磁盘挂载
  • 二叉搜索树、B-树、B+树
  • Docker简介与安装
  • Swift 单元测试
  • 有来团队后台项目-解析10
  • 【自动化】在C#中创建和配置串口对象SerialPort
  • 突破编程_C++_设计模式(访问者模式)
  • C语言入门到精通之练习53:矩阵交换行问题(附带源码)
  • Python白练-2统计下列5行字符串中字符出现的频数
  • 深入理解DHCP服务:网络地址的自动化分配
  • Java高级编程—泛型
  • Exam in MAC [容斥]
  • Java 学习和实践笔记(36):接口(interface)
  • Elastic Stack--10--QueryBuilders UpdateQuery
  • 腾讯云服务器CVM_云主机_云计算服务器_弹性云服务器
  • Java八股文(Spring Boot)
  • ts文件怎么无损转换mp4?这样设置转换模式~
  • 如何在Windows 10上打开和关闭平板模式?这里提供详细步骤
  • 介绍kafka核心原理及底层刷盘机制,集群分片机制,消息丢失和重复消费有对应的线上解决方案
  • 基于Python的中医药知识问答系统设计与实现
  • QT 如何防止 QTextEdit 自动滚动到最下方
  • 【C/C++ 学习笔记】指针
  • 【Node.js从基础到高级运用】十二、身份验证与授权:JWT
  • 蓝桥杯刷题|01入门真题