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

浅谈设计模式(三)

 

前言

      之前详细介绍了几种常用的设计模式,最后总结一下附上所有设计模式的类图以及六大设计原则


一、创建型

1.Factory Method(工厂方法)

定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。方便产品维度的扩展

类图:

2.Abstract Factory(抽象工厂)

定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

类图:

3.Builder(生成器模式)

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

类图:

4.Prototype(原型模式)

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

类图:

5.Singleton(单件模式)

定义:确保一个类只有一个实例,并提供全局访问点。

类图:

代码:

public class Singleton
{
private volatile static Singleton uniqueInstance;
private static object singletonData = new Object();
private Singleton()
{ }
public static Singleton GetInstance()
{
if (uniqueInstance == null)
{
lock (singletonData)
{
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}

二、结构性

1.Adapter(适配器模式(类、对象))

定义:将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

类图:

2.Bridge(桥连模式)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

类图:

3. Composite(组合模式)

定义:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

类图:

4. Decorator(装饰模式)

定义:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。

类图:

4.Facade(门面模式)

定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高级接口,这个接口使得这一子系统更加容易使用。

类图:

5. Flyweight(享元模式)

定义:运用共享技术有效地支持大量细粒度的对象。

类图:

主要应用String对象

6. Proxy(代理模式)

定义:为其他对象提供一种代理以控制对这个对象的访问。

类图:

 

三、行为型

1.Interpreter(解释器模式)

定义:给定一个语言,定义它的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

类图:

2.Template Method(模板方法)

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

类图:

3.Chain of Responsibility(职责链模式)

定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

类图:

4.Command(命令模式)

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

类图:

5.Iterator(迭代模式)

定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

类图:

6.Mediator(调停者模式)

定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

类图:

7.Memento(备忘录模式)

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

类图:

8.Observer(观察者模式)

定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。

类图:

9.State(状态模式)

定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

类图:

10.Strategy(策略模式)

定义:定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。

类图:

11.Visitor(访问者模式)

定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的前提下定义作用于这些元素的新操作。

类图:

六大设计原则

 

  1. 开闭原则:对修改关闭,对拓展开放
  2. 单一职责原则:类的职责要单一
  3. 里氏替换原则:一切可以使用父类的地方都可以透明的使用子类代替,而不需要修改任何代码
  4. 接口隔离原则:不同职责的接口不可以合并。一个是为了避免实现不需要实现的方法,另一个也为了避免对用户暴露不需要的接口方法
  5. 依赖倒置原则:依赖抽象,而不依赖具体,面向抽象编程。
  6. 迪米特法则:不要和陌生人说话。不与没有联系的对象直接进行交互

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

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

c++程序设计中虚基类,多继承知识点

一.前言 如上 二.题目 分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派 生出新类Teacher_Cadre(教师兼干部)类。要求: (1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 (2&a…...

FFmpeg:avcodec_encode_video()

本文简单分析FFmpeg的avcodec_encode_video2()函数。该函数用于编码一帧视频数据。avcodec_encode_video2()函数的声明位于libavcodec\avcodec.h,如下所示。 /*** Encode a frame of video.** Takes input raw video data from frame and writes the next output p…...

SpringBoot中必须掌握的45个注解

1.SpringBoot/spring SpringBootApplication: 包含Configuration、EnableAutoConfiguration、ComponentScan通常用在主类上; Repository: 用于标注数据访问组件,即DAO组件; Service: 用于标注业务层组件; RestController: …...

侯捷CPP---面向对象(上)

侯捷CPP---面向对象(上)前言头文件防卫式声明class 分类不带指针的class(complex)成员变量私有化inline function(内联函数)构造函数常量成员函数参数传递返回值传递友元函数操作符重载临时对象带指针的cla…...

使用注解开发

1; 2.mapper 2.测试...

苏宁易购启动六一宝宝节,首提“共情消费”

5月26日晚8点,苏宁易购六一宝宝节掰头大会在多个平台播出。六一宝宝节全面启动。 六一宝宝节定位于打破营销套路,打破传统电商促销节奏。它是大促,更是一场成年人释放压力、共情消费的盛典。 掰头大会灵魂辩题 开启宝宝节 六一宝宝节的启…...

设计一个windows应用程序,定义一个Student类,包含学号和姓名两个字段,并定义一个班级类ClassList

设计一个windows应用程序,定义一个Student类,包含学号和姓名两个字段,并定义一个班级类ClassList,该类包含一个Student集合,使用索引器访问该集合。 (1)创建一个Windows应用程序Myproject6_1。 …...

python笔记19年8月23日

-------------py打包exe教程------------ 准备好需要转换的py文件和一张用于做图标.ico的照片 将他们存放于同一个文件夹中,文件的路径全部为英文路径 1.利用cmd窗口安装pyinstaller插件 指令 :pip install pyinstaller 2.使用cd指令到py文件夹 3.执行命令 pyinstaller -F -i X…...

系统集成模拟3-55分

1、合同法律关系是指由合同法律法规调整的在民事流转过程中形成的(权利义务关系) 2、当已经采取了多种沟通方式还未能与用户达成一致时,应考虑沟通升级原则-双方高层沟通 3、数据域安全包括:行级数据域安全,数据域安全…...

Centos7 配置DHCP

实验内容及步骤 1、实验背景 某企业计划构建一台 DHCP服务器来解决IP地址动态分配的问题,要求能够分配 IP地址以及网关、DNS等其它网络属性信息。同时要求DHCP服务器为DNS、WEB、Samba服务器分配固定IP 地址。 2、网络拓扑 略. 3、实验环境 假设企业DHCP服务器…...

JVM常见配置汇总

堆设置 -Xms:初始堆大小-Xmx:最大堆大小-XX:NewSizen:设置年轻代大小-XX:NewRation:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRation:年轻代中Eden区与两个Survivor区的比…...

从类,API,框架三个层面学习如何设计可复用软件实体的具体技术学习心得

从类,API,框架三个层面学习如何设计可复用软件实体的具体技术学习心得软件复用概述软件复用概念软件复用的软件支持三方面讲述软件复用类代码复用设计的复用分析的复用测试信息的复用Liskov替换原则 ——LSPAPI框架软件复用概述 软件复用概念 软件复用(…...

惠普(HP) Officejet Pro 8610商用彩色喷墨一体机

专业彩色打印件的单页成本比激光打印机低 50%,从而在日常打印中节省更多打印成本。无论您身在何处,均可通过任意移动设备进行打印。 借助惠普“云打印”技术,您现在可以随时随地,随心打印。使用智能复印解决方案,创建完美无瑕的副本,同时轻松打印双面身份证。专业彩色打印…...

easyPOI和导入复杂excel的各种坑

//easyPOI的依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.3</version> </dependency>//要操作pdf,word还是用原生poi比较好 <dependency><groupId>org.…...

用直流电机测转速——测速发电机标定实验

测速发电机标定实验 文章目录测速发电机标定实验1 测速发电机原理和应用1.1 原理1.2 应用2 硬件搭建3 实验数据4 总结1 测速发电机原理和应用 1.1 原理 直流电机同时也是一个发电机。也就是说&#xff0c;当直流电机被通入直流电的时候&#xff0c;会将电能转化为机械能&…...

httprunner_locust_场景1:登录1次,添加10次地图

场景1&#xff1a;任务执行 > login执行1次&#xff0c;addtitle执行10次 from locust import HttpUser, task, SequentialTaskSet, between import json# 场景1&#xff1a;任务执行 > login执行1次&#xff0c;addtitle执行10次 class FlashTask(SequentialTaskSet): …...

Actor模型

传统的游戏服务器要么是单线程要么是多线程&#xff0c;过去几十年里CPU一直遵循摩尔定律发展&#xff0c;带来的结果是单核频率越来越高。而近几年摩尔定义在CPU上已然失效&#xff0c;为什么呢&#xff1f; 大于在2003年左右&#xff0c;计算机的核心特性经历了一个重要的变…...

冠美会计

...

C1任务03-Web基础与布局

文章目录任务一:使用富文本编辑器任务二:所见所得 式开发拓展任务:CSS盒子模型任务一:使用富文本编辑器 描述:制作表,让表格隔行换色.加入JavaScript按钮弹出框. 富文本编辑器 <style>.cl{color:red}table,tr,td{border:1px solid; padding:5px 20px 5px 0;font-size:10…...

前端基础:通过 《猜价格》游戏实战js选择语句

前端基础&#xff1a;通过 《猜价格》游戏实战js选择语句 谈到选择&#xff0c;其实人生有好多选择。学生毕业是选择留下家长还是远走他乡是一种选择&#xff0c;站在人生的十字路口不知道往哪个方向走也是一种选择&#xff0c;如下图所示。 程序也是一样的&#xff0c;在程序…...

Spring Cloud + Feign实现微服务负载路由

项目的启动顺序为 spring-cloud-eureka 提供注册服务&#xff1a;节点两个【resumer-eurake-9001、resumer-eurake-9002】 微服务&#xff08;提供服务&#xff09;&#xff1a;节点两个【resumer-user、resumer-user2forTest】 spring-cloud-feign调用微服务&#xff08;服务消…...

原子累加器

package com.lx.top;import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder; import java.util.function.Consumer; import java.util.function.Supplier;/*** 测试原子累加器*/ …...

ThreadLocalRandom 是线程安全的吗?

来源&#xff1a;https://zhenbianshu.github.io 前言 最近在写一些业务代码时遇到一个需要产生随机数的场景&#xff0c;这时自然想到 jdk 包里的 Random 类。 但出于对性能的极致追求&#xff0c;就考虑使用 ThreadLocalRandom 类进行优化&#xff0c;在查看 ThreadLocalR…...

测试总结:如何做接口测试

目录 一、接口测试须知 1、接口测试了解 &#xff08;3&#xff09;Http接口的组成 &#xff08;3&#xff09;为什么要做接口测试 &#xff08;1&#xff09;接口测试常用 &#xff08;2&#xff09;接口测试完整图 &#xff08;3&#xff09;接口测试参考计划图 3、企…...

CCF 2014-09-1 相邻数对

题目链接: 2014-09-1 相邻数对. code #include <iostream> #include <algorithm> //引入sort函数using namespace std;int main() {int n;cin >> n;int* nums new int[n];for (int i 0; i < n; i)cin >> nums[i];sort(nums, nums n);int coun…...

学习前端的第十天

这几天深受鼠标双击的折磨&#xff0c;非常痛苦&#xff0c;正好趁618换个鼠标。闲聊就到这吧&#xff0c;今天说说布局方式和浏览器兼容问题。 一、宽高自适应 1、自适应介绍&#xff1a;在以往的开发过程中&#xff0c;大家发现某个区域如果宽度或者高度固定好的话&#xff…...

网络规划-连接网络

文章目录网络规划-连接网络1 连接到广域网1.1 广域网连接方式2.2 专业术语2 点到点连接(PPP)2.1 PPP身份验证协议(PAP)2.2 配置PPP身份验证3 IPv4网络地址转换(NAT)3.1 NAT术语4 VPN4.1 VPN优点4.2 站点到站点VPN(GRE)4.2.1 GRE隧道配置4.2.2 GRE隧道检验4.3 远程访问VPN4.3.1 …...

阿里Java开发手册!阿里java电话面试

前言 不知道大家有没有这样的经历&#xff0c;明明感觉自己这个技术掌握的还行&#xff0c;能写在简历里肯定是有点自信的&#xff0c;但是被面试官一问&#xff0c;就感觉啥也不是 当我从面试的大楼里出来的时候脑袋里还是昏昏沉沉的&#xff0c;你压根不知道我经历了什么&a…...

Java-ArrayList修改和删除(泛型)

import java.util.ArrayList; import java.util.List;//泛型:给集合指定具体存放的数据类型&#xff0c;只能存放自定义数据类型。加了< >的可以使用泛型。 public class Demo3 {public static void main(String[] args) {//集合中只能存放自定义数据类型&#xff0c;不能…...

金三银四大厂面经总结,java怎么快速创建构造方法

前言 Java作为最全面的语言&#xff0c;国内开发者也是最多的&#xff0c;Java综合起来各方面都不错&#xff0c;在大部分场景下是一种稳健的技术选择。加上近年来安卓的推动&#xff0c;目前也是最流行的一种语言。 现在Java的就业市场看起来还是挺大的&#xff0c;而且工资…...

大咖说·图书分享|阿里云数字新基建系列:混合云架构

本期大咖说&#xff0c;看阿里云混合云技术服务高级技术专家、《混合云架构》图书联合作者解国红如何分享。 解国红 阿里云混合云技术服务高级技术专家&#xff0c;《混合云架构》图书联合作者。长期从事操作系统、虚拟化、云计算相关产品研发及运维工作。 曾就职于 Promise、…...

3 分钟搞瘫阿里内网,他是唯一能让马云睡安稳的男人!

作者 | 古蒙儿本文转载自花瓣志&#xff08;ID&#xff1a;iihuacao&#xff09;有这样一个人。拿着中学文凭去阿里巴巴面试&#xff0c;结果不但成功了&#xff0c;还成了元老级人物。在阿里待了8年后&#xff0c;又出走自创公司。2年后&#xff0c;马云花了几十亿把他连人带公…...

51boxs学院: 整理的70道阿里的Java面试题,都来挑战一下,看看自己有多厉害

整理的70道阿里的Java面试题&#xff0c;都来挑战一下&#xff0c;看看自己有多厉害。 1、java事件机制包括哪三个部分&#xff1f;分别介绍。 2、为什么要使用线程池&#xff1f; 3、线程池有什么作用&#xff1f; 4、说说几种常见的线程池及使用场景。 5、线程池都有哪几种工…...

开箱:阿里技术人在读什么书?

一、引言 读书&#xff0c;伴随着技术人的一生。 在人间四月的读书天&#xff0c;我们邀请到9位阿里技术圈中有技术鉴赏力、有技术影响力的技术专家。他们擅长技术创作&#xff0c;或写出过爆款的技术好文&#xff0c;或出过技术类书籍。我们将透过个人技术修炼、思考和成长、…...

阿里安全资深专家杭特辣评中国网络安全人才之“怪现状”

随着网络空间成为第五空间、社会基础产业全面互联网化&#xff0c;网络安全&#xff08;或称广义的信息安全&#xff09;面临的威胁越来越大&#xff0c;对网络安全的人才需求也呈现出井喷趋势。即使目前很多人可以自学成才&#xff0c;“网络空间安全”也成为一级学科&#xf…...

三分钟黑掉阿里内网?他正在做的事将彻底改变现有商业模式!

点击“技术领导力”关注∆ 每天早上8:30推送来源&#xff1a;电商报&#xff08;ID&#xff1a;kandianshang&#xff09;关于吴翰清的传言有很多&#xff0c;最流行的一个版本是&#xff1a;2005年&#xff0c;20岁的吴翰清在阿里面试时&#xff0c;拿起面试官的电脑“啪啪”…...

百度、阿里、腾讯等知名互联网公司的一些大佬,值得学习

大家好&#xff0c;经常有读者说自己动力不足&#xff0c;并问我该如何学习和坚持&#xff1f;该如何找资料学习&#xff1f;我想说的是&#xff0c;除了必要的个人努力和坚持外&#xff0c;还需要有好的榜样和资料。今天给大家介绍一些公众号&#xff0c;号主来源于百度、阿里…...

从双十一看阿里云安全的“创世纪”——采访阿里云安全掌门人肖力有感

“神说要有光于是就有了光。”在双十一采访了阿里云安全掌门人肖力之后&#xff0c;忽然对这句话有了全新的认识。从肖力的介绍中我们不难体会到&#xff0c;与云计算相伴而生的阿里云安全诞生的必然性&#xff0c;云的先天基因赐予它“原生的神力”&#xff0c;从最初单纯的攻…...

阿里云大规模即时云渲染支撑天猫双11“直播未来城”

在今年的天猫双11购物狂欢节&#xff0c;一个名为淘宝“直播未来城”的3D空间&#xff0c;首次出现在了淘宝App中。 据悉&#xff0c;“直播未来城”是线上大规模沉浸式3D互动应用在电商营销场景的一次实践。阿里云大规模即时云渲染为这次实践活动提供了计算服务&#xff0c;给…...

记一个跟阿里的朋友喝酒的周末-20211201

上周杭州来了几个朋友&#xff0c;吃饭时聊到他们前老板郭东白&#xff0c;对了&#xff0c;我朋友在速卖通&#xff0c;郭东白是他们的前 CTO&#xff0c;带了他们 4 年多&#xff0c;现在去北京的瓜子二手车了&#xff0c;但说是现在还是经常骑四个小时山地车去长城脚底下写代…...

P10首次揭秘阿里14年架构演进,还得是他

谈起中国顶尖的程序员&#xff0c;很多人首先会想到之前的雷军、张小龙&#xff0c;还有现在的多隆、行癫、道哥等人&#xff0c;但今天我想聊一聊的这位大神&#xff0c;他的技术成就也同样令人瞩目。19 年获得国家技术发明二等奖、20 年获得国家计算机协会颁发的“ CCF 杰出工…...

阿里留不住的 P10 毕玄到底有多牛?

见字如面&#xff0c;我是军哥&#xff01;我记得&#xff0c;第一次认识他是 2017 年&#xff0c;当时我还在饿了么任技术总监的时候&#xff0c;他来饿了么指导和交流饿了么多活系统架构的设计&#xff0c;人生第一次接触 P10 大牛&#xff0c;他为人非常谦虚&#xff0c;整个…...

阿里留不住的 P10 毕玄,到底有多牛?

谈起中国顶尖的程序员&#xff0c;很多人首先会想到之前的雷军、张小龙&#xff0c;还有现在的多隆、行癫、道哥等人&#xff0c;但今天我想聊一聊的这位大神&#xff0c;他的技术成就也同样令人瞩目。19 年获得国家技术发明二等奖、20 年获得国家计算机协会颁发的“ CCF 杰出工…...

阿里技术文档

2018-07-03 14:24 《不止代码》 如何快速成长为技术大牛&#xff1f;阿里资深技术专家的总结亮了 1 毕业 3 年&#xff0c;为何技术能力相差越来越大&#xff1f; 10 程序员吃的是青春饭&#xff1f;本质上取决于…… 15 技术变化那么快&#xff0c;程序员如何做到不被淘汰&…...

21岁被人“封神”,曾一分钟黑了阿里巴巴后台系统!

这个被誉为“阿里神”的吴瀚清是马云公司旗下一个最特别的存在&#xff0c;1985年出生的他自从进入公司以来任何一个人都会恭恭敬敬的称呼他一声”道哥“&#xff0c;在去年2017年这位年轻的小伙子咋世界牛人协会中被世界称为最有可能改变世界的牛人之一&#xff0c;有这样高称…...

阿里 P10 是怎样的存在?

谈起中国顶尖的程序员&#xff0c;很多人首先会想到之前的雷军、张小龙&#xff0c;还有现在的多隆、行癫、道哥等人&#xff0c;但今天我想聊一聊的这位大神&#xff0c;他的技术成就也同样令人瞩目。19 年获得国家技术发明二等奖、20 年获得国家计算机协会颁发的“ CCF 杰出工…...

阿里巴巴安全部道哥、云舒3月10日在北邮讲座小记

PS&#xff1a;作为一个计算机行业安全研究人员&#xff0c;感觉到做学术不可与业界完全脱离&#xff0c;固特去北邮旁听&#xff0c;有些ideas很让人受启发&#xff01; 附链接&#xff1a;http://bbs.byr.cn/#!article/Security/39553 -----------------------------------…...

阿里云道哥:我曾经是饱受网络攻击摧残的创业者,现在我要帮他们顶住

我的人生路线被改写&#xff0c;也许是因为那次 DDoS 攻击。道哥想起了什么&#xff0c;笑了。 很早的时候&#xff0c;我办了幻影论坛&#xff0c;到现在我还会经常回忆。那是中国白帽子的温床。我记得论坛里有很多不可多得的技术人才&#xff0c;他们的光芒让人敬畏。如果幻影…...

适用更多会议场景,华为云会议的分组讨论功能来了!

适用更多会议场景&#xff0c;华为云会议的分组讨论功能来了&#xff01; 如今&#xff0c;线上沟通成为常态&#xff0c;线上会议更是成为工作推进过程中不可缺少的环节。但在一些场景中&#xff0c;例如在跨部门协调&#xff0c;沙龙研讨&#xff0c;教育培训或者招聘面试时&…...

python脚本无缝拼接图片

1、普通串行&#xff1a; import numpy as np from PIL import Image images [img01,img02,...imgxx] img img_array for index,value in enumerate(images):if index0:img_array np.array(Image.open(value))else:img_array2 np.array(Image.open(value))img_array np.co…...