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

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

一、创建型设计模式一览 

二、创建型设计模式

2-1、创建型设计模式的概念

一个类创建型模式使用继承改变被实例化的类;

一个对象创建型模式将实例化委托给另一个对象。

对应java的new一个对象。

2-2、简单工厂模式(静态工厂方法)

简单工厂模式属于创建型模式,但不属于23种设计模式之一

1、定义

定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

在简单工厂模式中用于被创建实例的方法通常为静态方法,因此简单工厂模式又被成为静态工厂方法。

简单工厂模式的三类角色:

1、工厂(核心):负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需对象。

2、抽象产品:工厂类所创建的所有对象的父类,封装了产品对象的公共方法,所有的具体产品为其子类对象。

3、具体产品:简单工厂模式的创建目标,所有被创建的对象都是某个具体类的实例。它要实现抽象产品中声明的抽象方法。

2、代码实现

简单工厂模式的问题:

若是要新增一个productC,则需要修改Factory类的代码。

违反了开放封闭原则。

开闭原则是指:

软件应该对扩展开放,而对修改关闭。这里的意思是在增加新功能的时候,能不改代码就尽量不要改,如果只增加代码就完成了新功能,那是最好的。

2-3、工厂方法模式

1、意图:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类

上午题喜欢考:意图,原话。

下午题喜欢考:代码填空。

2、代码实现

3、结构图(官方)

4、适用性

  • 当一个类不知道它所必须创建的对象的类的时候;
  • 当一个类希望由它的子类来指定它所创建的对象的时候;
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

上午题喜欢考。

2-4、抽象工厂模式

1、意图

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

2、结构

一个具体的工厂可以创建多个具体的类。

3、代码实现

客户端:

4、适用性

  • 一个系统要独立于它的产品的创建、组合和表示时;
  • 个系统要由多个产品系列中的一个来配置时;
  • 当要强调一系列相关的产品对象的设计以便进行联合使用时;
  • 当提供一个产品类库,只想显示它们的接口而不是实现时。

2-5、真题

真题1:

一个具体的工厂只能创建一个具体的产品:工厂方法模式;

一个具体的工厂能创建多个具体的产品:抽象工厂方法模式;

真题2:

相关文章:

  • ​【已解决】npm install​卡主不动的情况
  • Fair Data Exchange:区块链实现的原子式公平数据交换
  • HTML万字学习总结
  • 【Web开发】CSS教学(超详细,满满的干货)
  • HTML本地离线缓存?
  • 中国城市统计年鉴、中国县域统计年鉴、中国财政统计年鉴、中国税务统计年鉴、中国科技统计年鉴、中国卫生统计年鉴​
  • 【首次抽奖】16G、32G免费送!云服务器选购推荐 京东云 阿里云 腾讯云对比 幻兽帕鲁 雾锁王国 省钱学生党
  • 读书笔记--数据建模与设计的总结感悟
  • OpenvSwitch VXLAN 隧道实验
  • 指挥航空公司架次与延误率占比
  • 手机网络连接性能API接口:查询手机网络连接性能状态
  • android 简单快速 自定义dialog(简单好用,不需要设置样式)
  • 在idea中配置tomcat服务器,然后部署一个项日
  • 【力扣二刷思路】DAY3
  • SpringSecurity(SpringBoot2.X版本实现)
  • [case10]使用RSQL实现端到端的动态查询
  • CentOS7 安装JDK
  • co.js - 让异步代码同步化
  • CODING 缺陷管理功能正式开始公测
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • django开发-定时任务的使用
  • es6
  • golang 发送GET和POST示例
  • Gradle 5.0 正式版发布
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node和express搭建代理服务器(源码)
  • node学习系列之简单文件上传
  • October CMS - 快速入门 9 Images And Galleries
  • PAT A1017 优先队列
  • PHP 小技巧
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Travix是如何部署应用程序到Kubernetes上的
  • VuePress 静态网站生成
  • 强力优化Rancher k8s中国区的使用体验
  • 如何优雅地使用 Sublime Text
  • 使用SAX解析XML
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 移动端唤起键盘时取消position:fixed定位
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #Lua:Lua调用C++生成的DLL库
  • $GOPATH/go.mod exists but should not goland
  • $L^p$ 调和函数恒为零
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)基于IDEA的JAVA基础10
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Scala的“=”符号简介
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net Memory Profiler的使用举例
  • .Net 垃圾回收机制原理(二)