设计模式之结构型模式:构建灵活且可复用的类和对象结构
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。
由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。
结构型模式分为以下 7 种:
代理模式
适配器模式
装饰者模式
桥接模式
外观模式
组合模式
享元模式
代理模式概念由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。
结构代理(Proxy)模式分为三种角色:
抽象主题(Subject)类: 通过接口或抽象类声明真实主题和代理对象实现的业务方法。
真实主题(Real Subject)类: 实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
代理(Proxy)类 : ...
经验分享未读
设计模式之创建型模式:将对象的创建与使用分离创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。
这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。
创建型模式分为:
单例模式
工厂方法模式
抽象工厂模式
原型模式
建造者模式
单例模式概念单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
结构单例模式的主要有以下角色:
单例类:只能创建一个实例的类
访问类:使用单例类
饿汉式:类加载就会导致该单实例对象被创建
懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建
实现饿汉式
类加载就会导致该单实例对象被创建
饿汉式 实现方式:静态变量创建类的对象
1234567891011121314151617/** * 静态变量创建类的对象 * @author Ether */public class ...
经验分享未读
设计模式概述:构建灵活可重用的代码,提高软件开发效率设计模式概述产生背景1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。
1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)著称。
软件设计模式概念软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描 ...
学习笔记未读
软件设计师知识点整理(三)
软件设计师知识点整理(一) 一、计算机网络 二、操作系统基本原理 四、计算机组成原理与体系结构
软件设计师知识点整理(二) 四、编译原理基础 五、软件工程概述 六、计算机软件法律法规
软件设计师知识点整理(三) 七、系统安全设计与分析 八、数据结构与算法基础 九、数据库系统
七、系统安全分析与设计信息系统安全属性保密性:最小授权原则(只给应用维持其基本职能最基本的权限)、防暴露(如在命名时可以将名称设置为乱码)、信息加密(防止信息在传输时被截获后破解)、物理保密完整性(即保证数据在传输过程中不受损耗):安全协议、校验码、密码校验、数字签名、公证可用性(只允许合法用户使用这些资源):综合保障(IP过滤、业务流控制、路由控制选择、审计跟踪)不可抵赖性:数字签名
对称加密技术与非对称加密技术对称加密技术图注:替换:即将替换前后的符号对应关系绘制成为一张表,翻译时直接读表进行替换3DES更难破解;优点:加密速度快、效率高。缺点:加密强度不高、密钥分发困难
非对称加密技术图注:每个人都有自己的公钥,而公钥是明文公开的,大家都知道的,而私钥则是发送方与接受方各自独有且不能被别人知道的,如甲的公 ...
学习笔记未读
软件设计师知识点整理(二)
软件设计师知识点整理(一) 一、计算机网络 二、操作系统基本原理 四、计算机组成原理与体系结构
软件设计师知识点整理(二) 四、编译原理基础 五、软件工程概述 六、计算机软件法律法规
软件设计师知识点整理(三) 七、系统安全设计与分析 八、数据结构与算法基础 九、数据库系统
四、编译原理基础编译与解释词法错误:从左到右逐个扫描源程序中的字符,识别其中如关键字(或保留字)、标识符、常数、运算符以及分隔符(标点符号和括号)等语法错误:主要是分析句子结构的错误,如非法字符,关键字或标识符拼写错误,语法结构错误,if endif不匹配,缺分号等语义错误:死循环,零循环,其他逻辑错误等词法分析的输出是“记号流”;也就是语法分析的输入,而语法分析的输出是“语法树”词法分析的任务是把源程序的字符串转换为单词符号序列注:(1)符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统之中(2)在对源程序进行编译的过程中,常生成与源程序等价的中间代码,以利于进行优化,常见的中间代码包括:后缀式、三地址码和树等(3)中间代码的生成与 ...
学习笔记未读
软件设计师知识点整理(一)
软件设计师知识点整理(一) 一、计算机网络 二、操作系统基本原理 四、计算机组成原理与体系结构
软件设计师知识点整理(二) 四、编译原理基础 五、软件工程概述 六、计算机软件法律法规
软件设计师知识点整理(三) 七、系统安全设计与分析 八、数据结构与算法基础 九、数据库系统
一、计算机网络OSI七层模型OSI 将计算机网络体系结构划分为七层,每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI 的服务定义详细说明了各层所提供的服务。
应用层:通过应用程序间的交互来完成特定的网络应用
表示层:解释交换数据的含义。该层提供的服务主要包括数据压缩,数据加密以及数据描述。
会话层:负责建立、管理和终止表示层实体之间的通信会话。该层提供了数据交换的定界和同步功能,包括了建立检查点和恢复方案的方法。
传输层:负责因特网中两台主机的进程提供通信服务。
网络层:选择合适的网间路由和交换节点,确保数据按时成功传送。
数据链路层(链路层):数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
物理层:实现计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和 ...
学习笔记未读
LeetCode刷题记录(二)栈与队列232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
示例 1:
12345678910111213输入:["MyQueue", "push", "push", "peek", "pop", "empty"][[], [1], ...
学习笔记未读
LeetCode刷题记录(一)
KMP最长公共前后缀:主要用于字符串匹配
例题:28. 找出字符串中第一个匹配项的下标、459. 重复的子字符串
讲解:
帮你把KMP算法学个通透!B站(理论篇)
帮你把KMP算法学个通透!(求next数组代码篇)
数组35.搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
12输入: nums = [1,3,5,6], target = 5输出: 2
示例 2:
12输入: nums = [1,3,5,6], target = 2输出: 1
示例 3:
12输入: nums = [1,3,5,6], target = 7输出: 4
提示:
1 <= nums.length <= 10^4
-10^4 <= nums[i] <= 10^4
nums 为 无重复元素 的 升序 排列数组
-10^4 <= target <= 10^4
题解
类似于二分查找,分三种情况:1.targ ...
经验分享未读
Heo即刻短文:分享自我与精彩生活即刻短文部署,原教程Hexo的Butterfly魔改:即刻短文静态部署版,本文在原有基础上进行了拓展。
注:如有新功能本文会继续进行更新。2024/07/03
列表
是否支持
图片
✅
链接
✅
音乐
✅
瀑布流
✅
首页滚动
✅
位置信息
✅
预览即刻短文-随风起:分享知识与美好时光
创建数据在source/_data目录下创建essay.yml
123456789101112131415161718- class_name: 即刻短文 essay_list: - content: 文章推荐卡片教程推出 image: https://cdn.bywind.xyz/img/cover/image-20221221154442479.png link: https://blog.bywind.xyz/posts/ab6e072d.html location: 山西 date: 2022-12-21 - content: 关于本站 link: https://blog ...
转载内容未读
博客随机文章跳转
本文参考自heo及Jayhrn
创建文件创建themes/butterfly/scripts/helpers/random.js文件
开启pjax方案1234567891011hexo.extend.generator.register('random', function (locals) { const config = hexo.config.random || {} const posts = [] for (const post of locals.posts.data) { if (post.random !== false) posts.push(post.path) } return { path: config.path || 'bywind/random.js', data: `var posts=${JSON.stringify(posts)};function toRa ...