自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(163)
  • 资源 (22)
  • 收藏
  • 关注

原创 Typescript(一)简单的介绍及安装

TypeScript 是由微软公司在 2012 年正式发布,现在也有 8 年的不断更新和维护了,TypeScript 的成长速度是非常快的,现在已经变成了前端必会的一门技能。TypeScript 其实就是 JavaScript 的超集,也就是说 TypeScript 是建立在 JavaScript 之上的,最后都会转变成 JavaScript。一:编辑器我这里推荐使用微软的vscode编辑器,目前,无论是开发PHP,前端,python基本上都是在使用这款编辑器。主要是他同时支持windows,lin

2021-04-28 08:45:02 16

原创 VUE3(三十)自定义抽屉组件Drawer

我这里计划做一个即时聊天的小功能,计划是在一个抽屉组件中实现这个功能。但是最后能不能成功我也不知道,毕竟我没做过,但是抽屉组件可以提前做一个嘛,这个不是很难。代码:Drawer.vue:<template> <div class="drawer"> <!-- 遮罩层 --> <div class="mask-show" v-if="drawerShow" @click="close()" ></div> <

2021-04-26 09:10:09 26

原创 VUE3(二十九)自定义点击图片显示大图bigImg组件

上一篇中介绍了如何使用onclick为动态添加的dom元素绑定事件。我现在就可以自定义大图组件了。为ueditor编辑的html添加onclick这个步骤,我是在后端做的,后端返回到前端的值,就是已经拼装好的html。最后效果如下图所示:代码:BigImg.vue<template> <!-- 过渡动画 --> <div name="fade">    <div class="img-view" @click="bigImg"&g

2021-04-25 10:01:24 14

原创 VUE3(二十八)页面加载完成后,使用onclick为动态添加的dom元素绑定点击事件

博客做的比较早,那个时候还不知道有markdown编辑器这个玩意。所以我的文章都是用ueditor编辑的。我这里大概想做一个大图的自定义组件:需求是,点击文章中的图片,显示大图。那么这里就有一个问题,我怎么在页面加载完成之后给html绑定事件呢?Jquery有$.on方法,但是,我不想再vue里边使用jquery。哎呀,迷糊了,原生javascript有onclick呀。上代码:1:要有一段在页面加载完成之后添加的html代码let conten=`<button οnclick="c

2021-04-23 08:52:36 23

原创 VUE3(二十七)自定义upload上传组件(显示上传进度)

项目中需要使用到文件上传。我这里自己定义了一个上传文件的组件支持显示上传进度显示(我这里显示的是真实的上传进度,当然,这个可以根据你自己的需求修改)。支持多文件上传。最终效果如下:代码:Uploads.vue<template> <div class="myUpload"> <!-- 上传文件列表 --> <div class="myUpload-img center" v-for="(item,index) in mydata"

2021-04-22 09:22:11 27

原创 VUE3(二十六)基于wangeditor自定义富文本插件

项目中需要使用到wangeditor,这里封装一个自定义组件,便于后期使用。首先,官方文档:https://www.wangeditor.com/1:安装npm i wangeditor --save2:组件代码Wangeditor.vue<template> <div ref='editor' ></div> <!-- <button @click='syncHTML'>同步内容</button> &

2021-04-21 09:08:03 25

原创 VUE3(二十五)自定义Modal对话框组件

接着自定义组件,这里是我自定义的一个modal对话框组件。效果如下图所示:Modal.vue<template> <div class="modal-backdrop" v-if="modalShow"> <div class="modal" > <div class="modal-header"> <div><h3>{{title}}</h3></div&gt

2021-04-20 08:46:06 22

原创 VUE3(二十四)自定义alert弹窗组件

我这里自定义了几个alert弹窗组件:1:带有确定取消的alert弹窗组件:效果如下图所示代码:/** * 自定义公共函数 */const utils = {/** * @name: 自定义alert(确定,取消) * @author: camellia * @email: guanchao_gc@qq.com * @date: 2021-01-23 * @param: data string 显示的文字 * @par

2021-04-19 09:07:25 29

原创 VUE3(二十三)自定义分页组件Pagination

刚开始使用vue3写博客的时候,其相关配套的UI库并没有正式发布,但是我还要用,所以这里我自定义了一个分页组件:最后效果如下图所示:上代码:Pagination.vue<template> <!-- 自定义分页组件 --> <div class="page-bar"> <ul> <li class="first"> <!-- <span>共{{dataNum}}条记录 第 {{c

2021-04-17 09:00:14 26

原创 VUE3(二十二)vue-router 开启路由懒加载

一、为什么要使用路由懒加载为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题。二、定义懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载。三、使用常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import1、未用懒加载,vue中路由代码如下// 官方文档:https://vue3js.cn/router4/guide/#html// 引入vue-router对象import { createRouter, createWebHistory, crea

2021-04-17 08:55:12 31

原创 VUE3(二十一)vue-router 在新窗口打开页面的功能

新窗口打开标签页这个功能在html中还是很简单的。添加Target=”__blank”就好。但是在vue中怎么实现呢?其实很简单:VUE2:const { href } = this.$router.resolve({ name: `print_schedule`, params: { id: id } }); window.open(href, "_blank");VUE3:const router

2021-04-15 14:01:17 51

原创 ubuntu(四)Ubuntu18.04安装微信

话说我的ubuntu系统上边,已经有了搜狗输入法,360浏览器,vscode,网易云,VMware,qq,wps还差个微信基本上就可以能彻底摆脱windows了。以上的软件我都是安装官方提供的版本,其实还是挺好用的,就是不好用的时候直接死给你看就是了。但是快啊~这是以我目前的硬件配置windows如何也达不到的水平。今天大概记录一下微信的安装过程,当然,这个是deepin版本的。一:安装deepin-wine环境1:在线安装通过执行以下命令可以安装最新Release版本的deepin-wine-

2021-04-09 09:22:04 58

原创 VUE3(二十)VUE自定义指令v-preventReClick,防止多次点击,重复请求

VUE不仅为我们提供了自定义组件,还提供了自定义指令。当然,这个玩意我在VUE2中是没有用到过的。VUE3中我大概试一下这个自定义指令:官方文档:https://vue3js.cn/docs/zh/guide/custom-directive.html#动态指令参数一:注册全局指令在main.ts中加入如下配置:// =======================================================// 注册一个全局自定义指令 `v-focus`app.direc

2021-03-29 10:11:36 69

原创 VUE3(十九)服务端开启gzip加速网站打开速度

一:压缩的好处压缩可以减小HTTP回复的大小,从而降低web服务器的响应时间。gzip是web服务器广泛使用的压缩工具,可以将HTTP回复的大小降低到原来的50%~30%。既提高了网页的加载速度,又可以节约服务器流量。二:Nginx服务器启用Gzip压缩的方法打开nginx.conf文件,将一下的代码粘贴到文件中:#开启gzip功能gzip on; #开启gzip静态压缩功能gzip_static on; #gzip缓存大小gzip_buffers 4 16k;#gzip http版本

2021-03-27 14:36:02 23

原创 VUE3(十八)vue 路由history 模式去掉 URL 中的 # (nginx)

这部分内容比较少。其实更多的是参考一下vue-router4的官方文档就好。但是,这部分还是拿出来说一下。1:router.ts// 官方文档:https://vue3js.cn/router4/guide/#html// 引入vue-router对象import { createRouter, createWebHistory, createWebHashHistory, ErrorHandler } from "vue-router";/** * 定义路由数组 */const rout

2021-03-25 17:42:12 65

原创 nginx(一)nginx配置反向代理与负载均衡

最近在研究秒杀程序的设计及服务器配置。涉及到秒杀这个问题,那肯定就意味着大流量高并发访问,那么大概率我们需要做反向代理与负载均衡配置。那么如何配置nginx的反响代理与负载均衡呢?一:配置服务器环境首先,我们大概需要准备三台服务器一台做反向代理,剩下的两台做负载均衡的演示。反向代理服务器只需要配置nginx环境即可,因为,其只做为请求转发的中转站。两台负载均衡服务器,需要配置lnmp环境,具体配置过程请移步《Centos7.6配置lnmp》上边的方法是属于有那个条件的同学使用,正常一台服务器

2021-03-22 10:08:32 46

原创 VUE3(十七)使用reactive ref 替代VUEX状态管理

之前在使用VUE2的时候有用到VUEX状态管理系统。我用的比较多的地方是子父组件传值,或者爷孙组件传值。就是共享状态。VUEX在我这里的作用主要还是为了简化组件中的代码的复杂度。所用的值使用VUEX统一管理,对后期的维护以及扩展性都有很大的帮助。Vuex为我们提供了大概以下几个功能: 集中式存储管理应用的「所有组件」的「状态」 保证状态以「可预测」的方式「发生变化」 与调试工具集成,提供功能:time-travel、状态快照导入导出共享状态必须符合两个条件:响应式:当状

2021-03-19 09:56:28 116

原创 VUE3(十六)封装axios

一:axios 基础从浏览器中创建XMLHttpRequest从node.js发出http请求支持Promise API拦截请求和响应转换请求和响应数据取消请求自动转换JSON数据客户端支持防止CSRF/XSRF二:axios封装关于Axios的封装这部分涉及到与后端的一些约定。什么约定呢?就是在我们请求接口的时候,后端会返回给我们一个code。在我开发的时候,一般约定code:-200为登录失效状态code:-100为接口发生错误状态。(为了避免服务器端接口报错导致前端无法运行

2021-03-18 17:09:53 240

原创 VUE3(十五)关于cookie使用的几个函数

下边是我简单封装的几个cookie方法。Utils.ts/** * 自定义公共函数 */const utils = {/** * @name: 设置cookie值 * @author: camellia * @date: 2020-12-28 * @param: cname string cookie名称 * @param: cvalue any cookie值 * @param: exdays number co

2021-03-17 11:26:01 42

原创 sphinx(九)根据关键词相似度排序

全文检索通过sphinx搜索出来的内容是没有问题的。但是搜索结束之后,文章的排序还是多少有点小问题,是这样,我最开始是使用时间倒叙排序,这样就会有一个小问题就是,我想要的结果,或者说跟我搜索关键词最贴近的结果不会出现在前几条。这个体验很不好。然后,我这里使用了PHP内置的similar_text函数对文章的描述以及标题进行相似度的计算,然后根据计算之后的相似度数值进行倒叙排序。我这里封装了一个函数:仅作示例,具体还是需要根据你自己的需求来function similar_arr($array, $k

2021-03-16 08:50:59 18

原创 LAMP环境配置及NGINX安装

今天介绍一下lamp环境的配置。服务器用的是阿里云的服务器。L:centos、A:apache、M:mysql、P:php(一)安装apache我们这里安装的是httpd(1)安装httpd# yum install httpd(2)查看当前服务器是否安装httpd# rpm -qa|grep httpd(3)卸载httpd服务器# yum remove httpd(4)设置httpd开机自启# systemctl enable httpd.service(5)启动

2021-03-15 08:42:18 28

原创 VUE3(十四)使用计算属性computed和监听属性watch

首先,尝试一下计算属性computed第一种写法<template> <div> <p><input type="text" v-model="age"></p> <p><input type="text" v-model="nextAge"></p> </div></template> <script>import { computed,

2021-03-12 17:40:07 77

原创 VUE3(十三)main.ts中全局引入axios

VUE2中可以将我们需要的插件挂载到VUE的主链上(配置成全局属性),然后通过this调用,但是在VUE3的ts中使用这样的配置方法的话是没法通过编译的,这个时候我们就需要拓展属性。// 下面是在vue3.0定义源文件找到的一段说明注释/** * Custom properties added to component instances in any way and can be accessed through `this` * * @example * Here is an example

2021-03-11 13:36:27 186

原创 VUE3(十二)provide和inject函数

父传更深的后代一般往深度层级传递值,有这两种方式:· provide / inject· vuexprovide / inject一看到“深”这个字,大家肯定第一想到的就Vue2中的provide / inject选项。没错,这套逻辑在vue3中同样适用,这两个选项变成了两个方法。provide允许我们向当前组件的所有后代组件,传递一份数据,所有后代组件能够通过inject这个方法来决定是否接受这份数据。大致的示意图如下:实际应用场景主要应用的场景有两中,一种深度传递

2021-03-10 10:23:58 90

原创 VUE3(十一)自定义组件子父传值

在创建项目的时候,官方给出的页面,其实就给出了一个自定义的组件helloworld,里边包含了父传子传值,VUEX的使用,计算属性computed使用,方法的定义以及自定义组件的使用。计算属性computed和方法的定义,这里使用的并不是VUE3的新语法。在《VUE3(八)setup与ref函数》这篇中,setup的第二个参数context对象为我们提供了可触发事件emit,我们可以利用emit将子组件中的值传递给父组件。我这里仍旧使用上一篇中使用的项目来做测试,多说一句,使用VITE来搭建的项目其实

2021-03-08 14:21:40 72

原创 VUE3(十)生命周期及钩子函数

一:什么是生命周期Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。在Vue的整个生命周期中,它提供了一系列的事件,可以让我们在事件触发时注册js方法,可以让我们用自己注册的js方法控制整个大局,在这些事件响应方法中的this直接指向的是vue的实例。二:上图,对生命周期图的标注特别值得注意的是created钩子函数和mounted钩子函数的区别.

2021-03-03 09:23:53 164

原创 VUE3(九)reactive与toRefs函数

上一部分中我们说到的ref只是作为单个变量的响应。Vue3.0中还为我们提供了一个对象式响应的reactive函数 。Reactive函数创建一个响应式对象。一:Reactive函数其实,在我看来,reactive函数 就是VUE3.0为我们提供的替代VUE2.0中data的一个函数,因此,在这里,我不建议将方法也写到reactive函数中。reactive函数 中只写数据即可。1:引入import { ref, reactive,} from "vue";2:实例我这

2021-03-02 10:22:15 283

原创 VUE3(八)setup与ref函数

Setup是VUE3.0中为我们新提供的的组件选项。创建组件实例,然后初始化props,紧接着就调用setup函数,从生命周期钩子的视角来看,他在beforecreate之前调用。setup()是函数,具有return,return函数中定义的变量,把其暴露给模板。一:setup1:Setup可以替代VUE2中的data和method函数。(1):使用VITE创建一个空项目,默认会给我们一个helloworld组件,我们使用这个组件做测试。项目搭建,请移步《VUE3(一)安装+使用vite创建一

2021-03-01 09:25:51 373

原创 VUE3(七)vue项目抽离.vue文件中的js、css代码

平常再做开发的时候,一般情况下不会将html,js,css代码写到一个文件中。基本上都会写在各自对应的文件中,然后再引入即可。那么在VUE中我们如何抽离vue文件中的js,与css代码呢?1:抽离javascriptHome.vue<template> <div> <div :style="{ padding: '24px', background: '#fff', minHeight: '360px' }"> <h1>T

2021-02-26 10:30:16 136

原创 VUE3(六)项目配置使用404页面

当我们访问的路由没有预先定义的时候,就会跳到一个空白的页面。这样的体验不太好,那么我们需要配置,访问路由不存在时跳转404页面。实现这个小功能我用到了vue-router的路由守卫功能。在我们上一篇《VUE3(五)vue路由vue-router4》中的ts文件中添加如下代码:/** * 路由守卫 */router.beforeEach((guard) => { beforeEach.checkAuth(guard, router);}); /** * 路由错误回调 */r

2021-02-25 09:31:45 84

原创 VUE3(五)vue路由vue-router4

使用vue-router,这里特别说明一下,我这里记录的是vue-router文件的编写。及在页面中的使用。我的站点主要分为三个部分:1:pc端页面的路由2:手机端页面的路由3:后端管理系统的路由因此,我这里会使用到路由嵌套(子路由)。具体的用法请参照官方文档:https://router.vuejs.org/我这里放一下我当前使用文件得我内容。我使用的基础语言是typescript:Index.ts// 引入vue-router对象import { createRouter, cre

2021-02-22 10:07:50 113

原创 VUE3(四)目录结构

更好的了解项目的目录结构,能更好的去开发项目:当前展示的目录结构是基于vite搭建的项目。目录结构如下图所示:我的代码是托管在我自己的git服务器上边的,默认安装的时候是不存在的。1:dist目录存放打包之后的代码文件2:node_modules存放项目依赖的包目录3:public存放公共文件目录4:src存放代码的主要目录(1):assets我这里存放了每个页面对应的css、js以及图片文件(2):components存放项目使用的公共组件(3):router存放vu

2021-02-19 09:20:48 107

原创 VUE3(三)项目配置插件支持

上一篇中我们创建了项目并成功运行。这里为我的项目添加依赖,我这里使用的是yarn。1:安装vue-routeryarn add vue-router@next2:安装vuexyarn add vuex@@next3:安装组件库Ant Design Vueyarn add ant-design-vue@next4:安装typescriptyarn add -D typescript使用 TypeScriptmain.js 重命名为 main.tsindex.html 里把 /s

2021-02-18 13:48:33 83 2

原创 VUE3(二)使用vue-cli创建一个项目

VUE3官方推荐使用vite来构建项目,但是并不是说之前使用vue-cli创建项目就不行了。使用vue-cli创建项目,要确保你的vue-cli的版本要大于4.5.6.一:安装vue-cli建议使用 npm 安装Yarn 安装不会默认安装 vue 命令。1:命令npm install -g @vue/cli2:升级命令npm update -g @vue/cli3:查看版本vue --version二:使用命令行创建项目vue create vue3-test大概需要以下几

2021-02-09 08:54:37 48

原创 centos7.4修改ssh登录默认端口

禁止默认端口22 SSH登录修改成其他的端口。第一步,在阿里云配置开启你想开启的端口第二步:vim /etc/ssh/sshd_config找到“#Port 22”,按下图所示操作,将你想开启的端口号填在马赛克位置如果你开启了防火墙,还需要在防火墙开启端口。这里不做过多描述。重启服务器。大功告成欢迎访问个人博客https://guanchao.site欢迎访问小程序:...

2021-02-08 09:23:45 35

原创 VUE3(一)安装+使用vite创建一个项目

VUE3.0第一篇。主要还是看一看官方的手册,做一个笔记。官方文档网址:https://www.vue3js.cn/docs/zh/guide/introduction.html这里看一下vue3.0的安装以及创建第一个项目。官方对js包管理为我们提供了两个选择,npm和yarn。我这里比较倾向使用yarn。关于yarn的介绍,请移步《js包管理工具yarn》一:安装vue3.0yarn global add @vue/cli@next安装成功如下图所示:二:创建项目1:创建一个名为

2021-02-08 09:02:10 368

原创 PHP-redis操作类

关于PHP操作redis的一些命令之类的,我将其封装成了一个类,其中包含redis五种数据类型的操作,基本功能大概都是有了。下边是类的代码。文末有资源,可下载。Redis.php<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串。 * 只有在key不存在时,才会返回false。 * 这点可用于防止缓存穿透 * */class Redis{ private $redis; //当前数据库ID号 protected

2021-02-07 10:24:19 39

原创 Redis(十三)redis事务

Redis作为一个非关系型数据库,其也是有事务操作的。Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:(1)批量操作在发送 EXEC 命令前被放入队列缓存。(2)收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。(3)在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:(1)开始事务。(2)命令入队。(3)执行事务。但是redis的事务和mysql的事务还是有很大区别的,mysql

2021-02-05 17:20:51 15

原创 Redis(十二)redis键(KEY)

Redis 键命令用于管理 redis 的键。这个知识点一直被我给忽略了,前几天在测试redis的数据类型的时候,就在想,我测试过程中建了那么多的键来存储对应的数据,虽说最后数据都被我清掉了,但是键应该还是一直存在的吧。这个玩意怎么删呢?我要想查看一下,我都定义了那些键,这玩意是不是得有个命令啊?时间比较紧,也没多想。今天看到了这个redis键的命令,哦,原来你在这。大概看下几个常用的redis-key命令:一:linux命令1:del删除键,成功返回1,失败返回0del hash-key

2021-02-05 09:01:00 26

原创 Redis(十一)基于redis的发布订阅实现

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。Redis发布订阅功能(1)发送消息Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。(2)订阅某个频道Redis采用SUB

2021-02-04 16:55:14 20

gentelella-master.zip

gentelella 则是一款黑色主题的模板; 这个模板我现在也在用; demo:https://colorlib.com/polygon/gentelella/index.html

2020-09-26

设计模式(十五)之观察者模式.zip

观察者模式主要应用于一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者。当一个对象改变需要同时改变其他对象,而且他不知道具体有多少对象需要改变的时候,应该考虑使用观察者模式。

2020-02-17

blur-admin-master.zip

这个模板比较有现代感; 而且一次就给2套; 不过是为 Angular 量身定做的; 下面的 demo 链接需要才可正常浏览; demo1:http://akveo.com/blur-admin-mint/#/dashboard

2020-09-26

小程序(三)配置tabbar及自定义tabbar样式

关于tabbar部分,官方文档是有明确的说明的,当然,我这里是不存在把官方文档给你复制一遍的情况。我大概把我再看官方文档过程中遇到的坑,大概复述一下。 一:配置tabbar 这个主要是使用小程序自带的tabbar,在项目根目录下的app.json中配置,这个简单配置一下就可以了。

2020-09-26

ace后台模板ace-master

这套后台管理系统的模板,是我刚刚开始做开发的时候使用的。做的还是挺好的,就是样式可能有点老。demo:http://ace.jeka.by/

2020-09-26

startbootstrap-sb-admin-master.zip

大名鼎鼎的 sb 模板,这个我就不做太多的介绍了,用上就知道了。 demo:https://blackrockdigital.github.io/startbootstrap-sb-admin/

2020-09-26

startbootstrap-sb-admin-2-master

大名鼎鼎的 sb 模板,这个我就不做太多的介绍了,用上就知道了。 demo:https://blackrockdigital.github.io/startbootstrap-sb-admin/

2020-09-26

设计模式(八)之静态代理模式.zip

静态代理总结: 优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展。 缺点:我们得为每一个服务都得创建代理类,工作量太大,不易管理。同时接口一旦发生改变,代理类也得相应修改。

2020-02-17

设计模式(九)之工厂模式.zip

工厂模式:定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。

2020-02-17

设计模式(七)之装饰模式.zip

装饰模式精髓主要在装饰类Decorate.cs及子类中的base(执行父类方法)关键字,这二者体现了设计模式的精髓。

2020-02-17

设计模式(六)之里氏替换原则.zip

里氏替换原则有如下特点: 代码共享,减少创建类的工作量 提高代码的重用性 提高代码的可扩展性 提高产品代码的开放性 继承侵入性 只要继承,必须拥有父类的内容 降低代码的灵活性,子类必须拥有父类的属性和方法 增强耦合性。

2020-02-17

设计模式(五)之依赖倒转原则.zip

依赖倒置原则的包含如下的三层含义: 1. 高层模块不应该依赖低层模块,两者都应该依赖其抽象 2. 抽象不应该依赖细节 3. 细节应该依赖抽象 就是面向接口编程,采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

2020-02-17

设计模式(四)之开放封闭原则.zip

软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。 也就是如果需求发生变化导致程序中多个依赖模块都发生了级联的改动,就说明这个程序是有问题的,程序变得相对脆弱、无法重用。开放封闭原则就相对的解决了这个问题,它强调的是你设计的模块应该从不改变(绝对不改变是不可能的,只能相对少改动)。当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的代码。

2020-02-17

设计模式(三)之单一职责原则.zip

软件设计真正要做的内容,就是发现职责并把那些职责互相分离。单一职责原则可以使类的复杂度降低,实现什么职责都有清晰明确的定义;类的可读性提高,复杂度降低;可读性提高了,代码就更容易维护;变更(需求是肯定会变)引起的风险(包括测试的难度,以及需要测试的范围)降低。

2020-02-17

设计模式(二)之策略模式.zip

策略模式:定义了算法家族,分别封装起来,让其之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

2020-02-17

设计模式(十三)之外观模式.zip

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

2020-02-17

设计模式(一)之简单工厂模式

简单工厂模式,通俗点说,就是有一个基类(class abstract interface)以上三种类型都可以,在基类中定义方法,由子类来实现重写或者实现,那我们声明变量类型的时候,直接声明成这个基类的类型就好了。

2020-02-17

设计模式(十)之原型模式.zip

原型模式:就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。 重写抽象类中的Clone方法或者重写ICloneable中的Clone方法。 也就是说:要实现克隆的这个类,必须实现其Clone方法。

2020-02-17

设计模式(十四)之建造者模式.zip

建造者模式精髓:建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度。

2020-02-17

设计模式(十二)迪米特原则(最少知识原则).zip

迪米特(最少知识)法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

2020-02-17

设计模式(十一)之模板方法模式.zip

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

2020-02-17

设计模式(十六)之抽象工厂模式.zip

抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

2020-02-17

空空如也

空空如也

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

TA关注的人 TA的粉丝

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