自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 软件设计师考试内容复习(二)

一、层次化存储结构二、CacheCache的功能:提高CPU数据输入输出的速率,突破CPU与存储系统间数据传输带宽限制。在计算机存储系统体系中,Cache是访问速度最快的层次。使用Cache改善系统性能的依据是程序的局部性原理。如果以 h 代表对Cache的访问命中率,t1代表Cache的周期时间,t2代表主存储器周期的时间,以读操作,使用“Cache+主存储器”的系统的平均周期为t3,则t3=h∗t1+(1−h)∗t2其中(1-h)又称为失效率。...

2022-02-22 15:51:26 219

原创 函数柯里化实现JS bind方法

一、函数柯里化及其典型应用函数柯里化(Currying)是JavaScript函数编写中一种高级技巧,柯里化实质上是把接收多个参数的函数转换成接收一个单一参数(也即原函数中第一个参数)的函数,该函数能够返回一个新函数,新函数能够接收原函数的剩余参数并返回对应结果。简而言之,柯里化对于函数的简化作用在于,通过对首个参数的调用封装,从而返回一个功能不变,但前提明确的函数简易版。如正则表达式的判断:// 正常正则验证字符串 reg.test(txt)// 函数封装后function check

2021-12-08 11:18:25 410

原创 JavaScript风格指南

一、对象1.对象创建时,属性键名不要使用保留字// badvar person = { default: { name: 'jl' }, private: true};// goodvar superman = { defaults: { name: 'jl' }, hidden: true};二、数组1.向数组增加元素时使用push,避免使用数组位直接赋值var someStack = [];// badsomeStack[someStack..

2021-12-08 10:58:20 347

原创 前端工程性能优化

依据雅虎14条性能优化原则,《高性能网站建设指南》及《高性能网站建设进阶指南》中提到的性能优化点,按照优化方向进行分类整合,得到以下优化原则分类表:优化方向 优化手段 请求数量 合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域 请求带宽 开启GZip,精简JavaScript,移除重复脚本,图像优化 缓存利用 使用CDN,使用外部JavaScript和CSS,添加Expires头, 减少DNS查找,配置ETag,使AjaX可缓存...

2021-11-11 15:20:05 618

原创 如何成为更好的自己(一):引言

如何成为更好的自己?这个问题萦绕在我的脑海里已经有很长很长的时间了。也许这个问题看起来太过空泛,更像是“我是谁?”“我从哪里来”之类的哲学命题,以至于根本找不到一个简单而又标准的答案,但我想说的是,我并不追求一定要得到某种普适性的答案。更重要的是,我想通过这一整个系列的文章,理清自己的思路,坚定自己的三观,让更多和我类似却同样迷茫的人得到些许的启发与共鸣,这便是我一切努力最大的成就和收获。缘起“我以前没得选,现在我选择做个好人。”对我而言,选择权是尤为重要的一种权利,也许也是长久以来努力的寄托。比如

2021-08-08 22:02:19 152

原创 为什么Vue组件中的data必须是函数而非对象

1、对象还是函数?vue官方文档在声明式渲染这一节中给了我们这样的一个demo:<div id="app"> {{ message }}</div>var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }})在这个demo中data是一个对象,通过 new Vue 创建的 Vue 实例中,能够直接把data上的message属性通过模板渲染到页面上。但在官方文档的

2021-08-07 16:34:47 254

原创 论亲密关系的持久化

今天想说的问题有点大,笔者争取以较为清晰的逻辑思路表述我的观点。物质与精神帕斯卡说,“人,是一根会思考的苇草。”人,作为生物的一种,离不开物质环境的支撑。所谓哲学家,都是吃饱了之后才有精力研究哲学,这话虽有些戏谑,但确是事实。从唯物论的角度来看,人的思想境界、水平高低在物质湮灭之时并无明显作用。得道高僧遇到老虎也要逃开,至圣先师患上癌症也命不长久。何故?肉体无法脱离外部物质环境罢了。可是,精神价值就没有意义吗?当然不是。人之所以为人,正是因为思考。若无思想,与禽兽何异?几千年前的前辈,正是借助思想的

2021-05-27 20:25:06 337

原创 Synchronized对象锁和类锁

Java中的synchronized关键字,用于修饰需要同步的方法或需要同步的代码块,默认以当前对象作为锁的对象。在学习synchronized关键字时,有以下几点注意事项:一把锁只能同时被一个线程获取,没有获得锁的线程只能等待; 每个实例都对应有自己的一把锁(this),不同实例之间互不影响;例外:锁对象是*.class以及synchronized修饰的是static方法的时候,所有对象公用同一把锁; synchronized修饰的方法,无论方法正常执行完毕还是抛出异常,都会释放锁。这里我们

2021-05-13 14:49:01 857

原创 Web页面完整请求及渲染过程

前端技术人员离不开计算机网络通信知识的了解,基础的网络架构模型与TCP、HTTP等相关知识掌握之后,不免会考虑:我们在互联网使用过程中,输入一个网址后,获取网址对应的Web页面信息并成功渲染到浏览器窗口这一整套流程是如何实现的呢?本文就针对这一日常而又复杂的请求渲染流程进行一次较为全面的梳理介绍。一、Web页面请求过程1.DHCP配置主机信息在上网之前,我必须要让网络知道我是谁,只有网络知道我的身份,才会允许我们对它进行访问。因此,我们首先需要一个自己电脑对应的IP地址。假设我们最开始没有I

2021-04-27 10:17:20 764 1

原创 Java设计模式精简版总结整理(四):行为型模式(续)

本文承接上一篇设计模式总结内容,继续总结介绍行为型模式的后六种模式:观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式和解释器模式。一、观察者模式观察者模式,又叫做发布-订阅模式,是指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。现实情境中公众号和订阅者、天气预报和听众等都是观察者模式。观察者模式包括以下角色:抽象主题、具体主题、抽象观察者、具体观察者。观察者模式的关键在于将目标与观察者进行分离,通过在目标类中封装观察者对象

2021-04-25 16:15:27 109

原创 Java设计模式精简版总结整理(三):行为型模式

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作完成单个对象无法完成的任务。行为型模式包括11种,因篇幅限制,切分为两篇进行总结介绍,本篇介绍前5种行为型设计模式:模板方法模式、策略模式、命令模式、职责链模式与状态模式。一、模板方法模式模板方法模式是指定义一个操作中的算法骨架,将算法的一些步骤延迟到子类当中,使得子类可以不改变该算法结构的情况下重新定义该算法的某些特定步骤。现实情境中的论文模板、简历模板等都是模板方法模式。模板方法模式的关键在于定义一个算法流程的骨

2021-04-25 11:20:28 161

原创 Java设计模式精简版总结整理(二):结构型模式

结构型模式描述如何将类或者对象结合在一起形成更大的结构,就像搭积木, 可以通过简单积木的组合形成复杂的、功能更为强大的结构。共包含代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式7类。一、代理模式代理模式是指由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,而是以代理对象作为访问对象和目标对象之间的中介。可以理解为生活情境中中介所扮演的角色。代理模式的结构主要是通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实

2021-04-23 14:38:56 149

原创 Java设计模式精简版总结整理(一):创建型模式

一、单例模式单例模式是指一个类只有一个实例,且该类能自行创建这个实例的一种模式。适合需要频繁创建的类或只要求生成一个对象等情况,如ServletContext 、ServletContextConfig、Spring框架应用中的 ApplicationContext、数据库中的连接池等也都是单例模式。单例模式的关键在于:类构造方法的私有化:避免类在外部被实例化 线程安全:懒汉式单例需要保证线程安全public class LazySingleton { private..

2021-04-22 17:30:32 74

原创 程序设计面向对象思想笔记

一、三大特性封装封装是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。通过封装能够让对象使用者无需关心对象内部的细节,同时又可以通过对象对外提供的接口来访问该对象。封装的优点包括:减少耦合:可以独立地开发、测试、优化、使用、理解和修改。 减轻维护的负担:可以更容易得被理解,并且在调试的时候可以不影响其他模块。 有效地调节性能:可以通过剖析来确定哪些模块影响了

2021-04-22 10:57:56 149

原创 Web App开发经验总结

前端这个领域,上手很快,只需要短期学会html,css,js就可以开始写常规网页了。但另一方面,入门简单对应的是广泛、复杂、快速迭代的前端知识体系、框架、工具等一个又一个难题。以移动端开发为例,至今Web App开发仍然处于一个你方唱罢我登场的群雄割据时代,缺少一个绝对主流、统一的开发工具或规范。本文也仅仅基于个人有限的移动端开发经验及网上各路技术经验分享内容对Web App开发进行部分经验总结,供大家参考。一、不要刻意模仿移动端系统原生的默认样式和交互毕竟 WebApp 缺乏原生支持,肯定有模仿不

2021-03-09 14:15:23 628

原创 CSS在移动端适配中的部分问题总结

一、像素CSS即浏览器的渲染,而浏览器的渲染一定是基于像素而言的。对于像素,首先需要明确两个概念,即物理像素与逻辑像素。1.物理像素物理像素就是反映显示屏的硬件条件,反映的就是显示屏内部led灯的数量,可以简单理解,一组三色led代表一个物理像素,当然根据屏幕物理属性以及处理led的方法不一样。强调这是物理的,因为这是一个纯硬件指标。比如我把屏幕锯了一半,物理像素就只有一半。2.逻辑像素逻辑像素是为了调和距离不一样导致的差异,将所有设备根据距离,透视缩放到一个相等水平的观看距离之后得到的

2021-01-20 16:27:39 390

原创 装修经验前期准备

一、整体五金件要选择质量好、耐用度高的客厅卧室选择浅色地砖150cm的高度线上要有景观整体底色选择黑白灰或大地色,少量暖色,鲜艳色用软装饰品点缀色彩搭配要统一,可以使用挂画、靠枕、家具等颜色进行重复式协调(出现三次即形成色彩风格的统一)插座选择带开关的错位型五孔插座可以给冰箱单独留一根线路网线布六类强弱电要全部换新,弱电箱要买大的有风扇的瓷砖勾缝不要选择白水泥勾,美缝可以自己做甲醛污染测试公司不要相信如果客厅和卧室地板是一样的,完全可以通铺,不要扣条,或者选择

2020-12-09 15:56:55 619

原创 《小家:越住越大2》

第一章 餐厅如何避免杂乱一般家庭的餐桌物品占用餐桌桌面面积普遍较高,显得餐桌杂乱。可以采用餐边柜与餐桌零距离接触方式方便杂物摆放(也可以采用移动是多层收纳车)如何避免孤单在厨房做饭:厨房与餐厅采用玻璃吊轨门连接可以使用卡座代替普通餐椅餐厅小贴士:1.餐桌吊灯太小或离地太远,一般底端离地不宜超过1600mm,挂的太高就失去了空间中心的意义,失去了聚拢感2.如果只是偶尔会来客人,完全没必要一口气买六把椅子,可以使用牛皮纸凳子代替(可以折叠)3.餐桌边需要预留插座(高度不能太低),可以

2020-12-08 20:29:05 2230

原创 《小家:越住越大》

第一章 二八定律房子单价很贵,但却像人一样,慢慢被不必要的杂物堆积,变得杂乱、空间不足。人需要减肥,房子也需要减负,常用的东西(20%)放在随手可及的地方,不常用的东西(80%)合理收纳,这就是隐藏与显示的二八定律。收纳百分之八十的生活杂物,展示百分之二十的家具陈设,这就是收纳的意义。浴室柜(镜柜):人总是习惯把常用的放在触手可及的位置,所以镜柜不可以做全面镜,左右两侧或下侧应当留出开放式层便于物品放置。鞋柜:常换常穿的鞋应当避免放在柜门内,可以在鞋柜下侧留出空间。茶几:茶几作为室内动线

2020-12-08 16:41:54 5224

转载 前端单页面应用路由实现原理

一、前端单页面路由本质HTML5中对浏览器history对象方法进行了扩展,前端单页面应用的路由实现本质上都是基于history对象方法的封装实现用户url访问的存储记录与页面更新。二、history对象新增方法1.pushState(state,title,url)该方法会在历史记录中新增一条记录,改变浏览器的url,但是不刷新页面。pushState方法接受三个参数,state:一个与添加的记录相关联的状态对象,主要用于popstate事件。该事件触发时,该对象会传入回调函数。也

2020-10-21 11:13:41 1092

原创 前端基本网络协议知识整合

一、ICMP协议ICMP协议(Internet Control Message Protocol)的全称是“Internet控制消息协议”,它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议与ARP协议不同,ICMP靠IP协议来完成任务,所以ICMP报文中要封装IP头部。它与传输层协议(如TCP和UDP)的目的不同,一般不用...

2020-10-19 15:58:07 1334

原创 JS中一道关于函数柯里化的面试题

问题:实现一个函数,使得其运算结果可以满足如下预期结果:add(1)(2) // 3add(1, 2, 3)(10) // 16add(1)(2)(3)(4)(5) // 15解答:该题目实际上是利用了JS中函数的一种高级用法--函数柯里化,即将参数多次传入,采用参数缓存的技巧进行函数的apply循环调用,最终计算出结果。代码如下:function add () { var args = Array.prototype.slice.call(arguments);//缓存

2020-09-21 15:35:05 383

原创 Vue源码中的对象相等比较

Vue源码中的对象比较函数写的极为经典漂亮,在此进行部分注释并添加一个函数类型比较判断,代码如下:function isObject(o) { return typeof o==='object' } function isFunction(o) { return typeof o==='function' } function looseEqual(a,b) { //如果a和b都是值类型,可以直接判断是否相等

2020-09-17 15:51:39 1681

原创 谈谈对Cookie Session Token的认识

一、序言对从事Web开发的或者有过Web开发经验的朋友来说,身份验证一定是一个避不开的话题。即使是再小的系统,也少不了登录这道程序。不管是前端还是后端,总要和会话打交道,那么,就从会话开始,聊聊常用的验证方式:Cookie、Session、Token。在计算机术语中,会话是指一个终端用户与交互系统进行通讯的过程,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。理论上,一个用户的所有请求操作都应该属于同一个会话。但是,Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议

2020-09-11 11:12:43 204

原创 Vue Router在项目工程中部分具体用法的总结

一、序言对于一般性的前后端分离部署下的Vue项目而言,Vue Router可以说是必不可少的工具。最基本的情况下,我们在工程中使用Vue Router实现前端路由的路由注册、管理、跳转等功能。但Vue Router提供的功能绝不仅限于此,合理巧妙地使用Vue Router能够在很多情况下方便开发及实现一些特殊效果。二、路由守卫2.1 全局路由守卫Vue Router的一个常用配置就是路由守卫,通过router.beforeEach可以在每一次路由跳转之前进行权限判断或其他针对路由跳转的逻辑处

2020-08-19 16:34:30 226

原创 Java Optional类说明及使用(JDK8)

Optional类是JDK8提供的类,用于防止出现空指针异常。本篇旨在对该类进行说明及具体使用方式列举。一、序言Option在使用中主要是为了简化传统Java的if else形式对null情况进行判断。既然为了简化代码编写,就必须要提到JDK8的Lambda表达式。Lambda表达式是建立在函数式接口(函数式接口由@FunctionalInterface注解标识,接口有且仅有一个抽象方法)上的,具有()->{}的形式的函数表达式,有点类似于JavaScript中ES6的箭头函数形式。其使用场景

2020-08-19 11:02:02 571 1

原创 Java实现基于Socket的聊天室(三)服务器端

服务器端部分搭建思路及实现在阅读本篇之前,建议先阅读本篇的前两个部分:Java实现基于Socket的聊天室(一)序言:https://blog.csdn.net/Jiang216/article/details/108070585Java实现基于Socket的聊天室(二)客户端:https://blog.csdn.net/Jiang216/article/details/1080714221.1 构建服务器端图形化界面首先构建服务器端部分的图形化显示界面,构建ChatServerView

2020-08-18 13:50:38 609

原创 Java实现基于Socket的聊天室(二)客户端

客户端部分搭建思路及实现在阅读本篇之前,建议先了解Socket的基础相关知识,本文接上篇《Socket基础知识》:https://blog.csdn.net/Jiang216/article/details/1080705851.1 构建客户端可视化界面搭建ClientView类,该类继承JFrame类,并实现ActionListener, KeyListener两个事件监听接口。添加图形操作控件如下: private JTextArea chatArea;//聊天内容区 ..

2020-08-18 10:55:29 485

原创 Java实现基于Socket的聊天室(一)序言

序言1.1 什么是Socket?在网络编程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。Socket套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它包含网络通信的五种基本信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。1.2 Socket的原理Socket实质上提供了进程通信的端点。使用Socket进行网络通信,通信双方必须各自创建一个通信端点。可以理解为打电话,打电话

2020-08-18 10:23:07 564

原创 Java算法问题学习笔记(三)(数组分排、链表倒数K节点、链表反转、递增链表合并问题)

一、数组奇偶分排问题Q:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。A:分析:若不需要保证奇数和偶数调整后的分别相对顺序,则可使用双指针头尾相向扫描,判断奇偶性后调整位置即可;但若要考虑调整后的相对位置不变,则需要创建新的数组作为中介为妥。及将参数数组复制作为标的,统计数组奇数个数作为奇偶数分界点。再次遍历数组,分别以数组起始点与奇数统计总数点为排序后数组的奇数和偶数的占位起始

2020-08-15 16:25:14 140

原创 Java算法问题学习笔记(二)(二维数组查询,字符串空格、链表反向输出、两栈模拟队列、旋转数组问题)

一、顺序二维数组查询问题Q:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。A:分析如下:以一个符合要求的二维数组为例,int[][] array={{1,2,3},{4,5,6},{7,8,9}} 根据二维数组的行列分别递增规则,选取右上角元素为标的,与目标数字进行比较,在行数和列数不超过数组范围的前提下,...

2020-08-13 15:36:27 196

原创 Java算法问题学习笔记(一)(兔子问题、素数判断、水仙花数、正整数分解、最大公约数问题)

一、斐波那契数列(兔子问题)Q:有一只兔子,从第3个月开始每月生1只兔子,小兔子长到第3个月开始每个月也会生1只兔子,假如兔子都不死,问每个月的兔子总数是多少?A:本题是一道典型的斐波那契数列问题,斐波那契数列定义如下:斐波那契数列,又称为黄金分割数列,在数学上,指如下被递推的数列定义:F(1)=1,F(2)=1,F(n)=F(n - 1)+F(n - 2)(n≥ 3,n∈ N*)按照递推公式,解决代码如下:public class Fibonacci { pub...

2020-08-12 15:32:53 227

原创 关于Vue全局方法配置的总结

通过Vue-Cli搭建的Vue项目工程中,我们通常都会或多或少地使用Vue官方支持插件(如Router、Vuex、VueI18n等)、第三方插件、自定义工具函数等等,以方便我们的开发工作、优化代码结构、减少代码冗余。本文就目前我所接触到的业务需求,对Vue工程中的全局方法、属性配置方式进行总结。一、Vue.use()Vue官方文档中对Vue.use()定义如下:即插件需要支持install方法方能使用Vue.use()方式在Vue工程中进行全局配置,常用的如Vue-router,Vuex,E

2020-08-06 10:37:51 688

原创 Java面向对象设计模式学习(七):行为型模式(迭代器、访问者、备忘录、解释器)

本文主要介绍Java面向对象23种设计模式中行为型模式中的部分设计模式,上接Java面向对象设计模式学习(六)。八、迭代器模式(了解)迭代器模式面向的问题是:通常,集合的创建与遍历都在同一个类中,当遍历方法更换时就必须修改程序源代码,违背了 “开闭原则”。迭代器模式是指在客户访问类与聚合类之间插入一个迭代器,即提供一个对象来顺序访问集合对象中的一系列数据,而不暴露集合对象的内部表示。迭代器模式主要角色如下:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象..

2020-08-05 18:04:28 278

原创 Java面向对象设计模式学习(六):行为型模式(责任链、状态、观察者、中介者)

本文主要介绍Java面向对象23种设计模式中行为型模式中的部分设计模式,上接Java面向对象设计模式学习(五)。四、责任链模式责任链模式,也称职责链模式,主要面向以下问题:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。责任链模式是指:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。该模式下客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求.

2020-08-05 14:45:32 316

原创 Java面向对象设计模式学习(五):行为型模式(模板方法、策略、命令)

本文主要介绍Java面向对象23种设计模式中行为型模式中的部分设计模式。行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。一、模板方法模式模板方法模式是指定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。模板方法模式使用虚函数的多态性技术以及“不用调用我,让我来调用你”的反向控制技术,主要角色如下:..

2020-08-04 18:03:38 169

原创 Java面向对象设计模式学习(四):结构型模式(外观、享元、组合)

本文主要介绍Java23种面向对象设计模式中的结构型模式分类下的部分设计模式,接Java面向对象设计模式学习(三)。四、外观模式当软件系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。外观模式是指通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接..

2020-08-04 16:07:51 177

原创 Java面向对象设计模式学习(三):结构型模式(代理、适配器、桥接)

本文主要介绍Java23种面向对象设计模式中的结构型模式分类下的部分设计模式。一、代理模式即中介模式,代理模式是指给某对象提供一个代理以控制对该对象的访问,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。代理模式通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问。代理模式主要角色如下:抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类:实现了抽象主题中的具体业

2020-08-04 15:32:36 233

原创 Java面向对象设计模式学习(二):创建型模式(单例、原型、工厂、抽象工厂)

本文主要包括Java设计模式中的创建型模式分类下的部分设计模式:一、单例模式(Singleton)单例模式是指一个类只能有一个实例,且该类能自行创建这个实例的设计模式。通常情况下,普通类的构造函数是公有的,外部类可以通过“new 构造函数()”来生成多个实例。但是,如果将类的构造函数设为私有的,外部类就无法调用该构造函数,也就无法生成多个实例。这时该类自身必须定义一个静态私有实例,并向外提供一个静态的公有函数用于创建或获取该静态私有实例。单例模式结构图如下:单例模式又可以细分为懒汉.

2020-08-04 10:31:20 197

原创 Java面向对象设计模式学习(一):设计原则

一、设计模式分类Java的设计模式共包括23种,从设计目的(即要解决的问题)进行划分,分为创建型模式、结构型模式与行为型模式三类:创建型模式:即实现怎样创建对象,将对象的创建与使用分离。包括单例、原型、工厂方法、抽象工厂、建造者5 种创建型模式。 结构型模式:将类或对象按某种布局组成更大的结构,包括代理、适配器、桥接、装饰、外观、享元、组合7 种结构型模式。 行为型模式:将类或对象之间通过职责分配协作完成单个对象都无法单独完成的任务。包括模板方法、策略、命令、职责链、状态、观察者、中介者、迭..

2020-08-03 17:11:19 174

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除