- 博客(24)
- 收藏
- 关注
原创 我的设计模式笔记-创建型设计模型
这里写目录标题结构型适配器模式桥接模式装饰者模式外观模式*组合模式享元模式代理模式静态代理动态代理JDK动态代理Cglib动态代理结构型适配器模式对于绝大多数的编程语言,适配器一般会作为用户接口(Client Interface)的实现,然后对服务(Service)进行封装,用户还是和以前一样只跟对应接口进行交互,不需要管真正提供服务的是谁。我的理解Client调用Client Interface(客户端)进行相关的操作,真正提供服务的实现类Service的接口与Client Interfa
2021-06-24 10:50:50
332
原创 我的设计模式笔记-创建型设计模型
目录单例模式工厂模式抽象工厂模式*构造器模式原型模式单例模式单例模式表示全局中一个类只能有一个实例,和全局变量在一定程度上是有点相同的。但是全局变量可能会被覆盖从而导致一些问题,因此就有了单例模式。实现步骤把构造函数私用在一个静态的方法中调用构造函数来创建对象并且确保对外的方法来获取这个对象。单例模式的分类饿汉和懒汉,饿汉模式就是对象实例默认创建,获取对象的方法直接返回对象。懒汉则是在调用获取实例方法的时候才创建对象实例。(在多线程的情况下,懒汉模式需要加锁双重判断、并且要防止
2021-06-24 10:41:03
253
原创 我的设计模式笔记-行为型设计模式
目录模板方法模式命令模式中介者模式责任链模式策略模式迭代器模式观察者模式状态模式访问模式备忘录模式模板方法模式这是一个比较简单的设计模式,图中的AbstractClass就是模板类,客户端调用的是它提供的模板方法(templateMethod),模板方法中定义了每个抽象步骤(step)的执行顺序。而在具体的实现类(ConcreteClass)中,需要实现每一个步骤方法(step)。如果系统中,某些类似的功能执行的框架是一样的,只不过在具体的细节上有所出入,
2021-06-24 10:01:55
136
原创 我的设计模式笔记-享元模式
假设系统对象集合中的对象大部分的属性类似(存在几种不同的状态,可以模板化),只有少部分的属性不同,这个时候可以考虑享元模式来提高对象的利用率。我们通常把比较固定的(可以模板化)属性集合封装成享元类(Flyweight),享元类(Flyweight)的属性只能被初始化,不能被修改,这些属性被称为对象的内部状态。创建一个享元工厂(FlyweightFactory)来管理这些类,享元工厂的职责:负责缓存与创建享元类。//享元类public class MilkType { /** *
2021-06-24 08:54:03
103
原创 我的设计模式笔记-代理模式
代理模式静态代理静态代理的模式有点点像适配器模式,但是适配器是实现用户端接口,而静态代理则是相反,它是去实现服务提供者(第三方库)的接口(ServiceInterface),实现相同的接口意味者代理(Proxy)和服务实现类(Service)有相同的方法,因此代理可以在方法中引用服务实现类中的相同方法,并在此基础上扩充自己的功能。这就相当于代理更像是服务实现类的扩充,符合开闭原则。//服务接口public interface Bank { void getMoney(int money)
2020-10-30 09:08:03
154
原创 我的设计模式笔记-组合模式
组合模式当需要实现一个树状的对象结构,可以考虑使用组合模式。图中的"组件Component"是一个接口,接口中描述的每个树状结构中每个节点的通用方法。不过是”复杂的组件(Composite)“还是“简单的组件(Leaf)"都需要继承该接口,在复杂组件(composite)中需要一个组件(Component)列表对象,并提供列表的操作方法,简单组件则不需要列表对象。复杂组件的组件列表可以包含另一个复杂组件。public class Province extends Unit { //Unit就
2020-10-30 09:00:18
84
原创 我的设计模式笔记-装饰者模式
装饰者模式装饰者模式要求”主体“(被装饰者/图中的Concrete Component)和“装饰”(图中的Base Decorator)都要继承同一个接口(图中的Component)。其中“主体”和“装饰”可以直接是该接口的实现,并且装饰器(Decorator)与接口是聚合关系。聚合关系(Component聚合到装饰器上)就意味着,装饰器的构造方法需要接口作为参数传入。实现步骤声明接口主体类/装饰类分别实现接口方法将主体类聚合到装饰类中(即将主题类作为参数传入装饰类中的构造方法中)客户端创
2020-10-30 08:59:27
68
原创 我的设计模式笔记-桥接模式
桥接模式桥接模式是将抽象部分与它的实现部分实现部分的的分离,使它们都可以独立的变化。我的理解桥接模式有点和聚合很类似,上图中的Abstraction(最好是抽象类)作为Bridge的角色,它右边的Implementation作为一个它(Abstraction)的一个聚合的元素传入构造方法中。因为传入的不是具体的实现类,而是抽象的接口,因此它们之间的变化不会互相影响。实现步骤实现一个”被桥接“的抽象类实现一个桥(可以是抽象的也可以是具体的、但最好是抽象的)桥的构造方法中需要传入“被桥接
2020-10-30 08:58:17
92
原创 我的设计模式笔记-适配器模式
适配器模式图片来源:https://refactoringguru.cn/对于绝大多数的编程语言,适配器一般会作为用户接口(Client Interface)的实现,然后对服务(Service)进行封装,用户还是和以前一样只跟对应接口进行交互,不需要管真正提供服务的是谁。我的理解Client调用Client Interface(客户端)进行相关的操作,真正提供服务的实现类Service的接口与Client Interface(用户接口)的接口并不相同,因此无法调用Service中的方法,因为C
2020-10-29 16:03:53
103
原创 Redis常用命令
我对Redis常用的几种数据结构的命令进行总结,这些命令仅仅是在redis-cli上使用的,具体开发语言要根据该语言对应的语法进行调整。如有错误,还望各位指出来,具体内容如下:----------------------字符串------------------------键值对1. 创建字符串:set key value key:可以是数字、大小写字母、下划线或中文 v...
2019-07-20 18:17:30
235
转载 权限管理系统
权限管理系统 原创 2017年03月13日 20:09:59 <ul class="article_tags clearfix csdn-tracking-statistics
2017-12-17 22:42:47
728
转载 前端优化:延迟加载图片
如何提升页面打开的速度,我们不妨从图片下手,一方面我们要尽可能的使用更低像素的图片,另外一方面就是延迟加载图片,这样页面文字加载出来后,再显示图片,这样页面打开的速度就提升了。这两种实现方法相对简单,我们还有另外一种需求,如果我们不得不使用高像素的图片,而且页面打开时也要有图片,那就应该这样做。javascript代码://Written by Paul Seal 2015.
2017-12-10 22:34:57
616
转载 Java动态代理、cglib动态代理
说动态代理,需要先清楚静态代理。所谓静态代理就是程序员提前实现好的代理类,编译后class文件是已经存在的。实现原理,利用Java代理模式,由一个代理类持有委托类的实例,并实现委托类一样的接口,来实现增强方法的目的。我们主要用它来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情,甚至根本不去执行这个方法。因为在InvocationHandler
2017-12-04 08:14:24
182
转载 JavaEE 绝对路径、相对路径获取方式
Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的! 在开发Web方面的应用时, 经常需要获取服务器中当前WebRoot的物理路径。 如果是Servlet , Action , Controller, 或者Filter , L
2017-11-26 21:01:27
521
转载 前端优化
网站的划分一般为二:前端和后台。我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等。而前端呢?其实应该是属于功能的表现。并且影响用户访问体验的绝大部分来自前端页面。 而我们建设网站的目的是什么呢?不就是为了让目标人群来访问吗?所以我们可以理解成前端才是真正和用户接触的。除了后台需要在性能上做优化外,其实前端的页面更需要在性能优化上下功夫,
2017-11-19 20:37:48
135
原创 log4j基础使用教程
定义:Log4j是高度可配置的,并可通过在运行时的外部文件配置。它根据记录的优先级别,并提供机制,以指示记录信息到许多的目的地诸如:数据库,文件,控制台,UNIX系统日志等。组成:Log4j中有三个主要组成部分:loggers: 负责捕获记录信息。appenders : 负责发布日志信息,以不同的首选目的地。layouts: 负责格式化不同风格的日志信息。
2017-11-12 20:05:59
755
转载 从输入url到页面展示到底发生了什么
1、输入地址2、浏览器查找域名的 IP 地址 3、浏览器向 web 服务器发送一个 HTTP 请求4、服务器的永久重定向响应5、浏览器跟踪重定向地址6、服务器处理请求7、服务器返回一个 HTTP 响应 8、浏览器显示 HTML9、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等) 刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面
2017-11-05 16:02:34
132
转载 Http缓存
通过Internet获取资源既缓慢,成本又高。为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获取的资源,从而优化性能,提升体验。虽然Http中关于缓存控制的部分,随着协议演进,有一些变化。但我觉着,作为后端程序员,在开发Web服务时,只需要关注请求头If-None-Match、响应头ETag、响应头Cache-Control就足够了。因为这三个Http头就可以满足你
2017-10-30 20:32:20
318
原创 Java的对象序列化
1,什么是序列化,及序列化的作用?序列化就是讲对象转为一组字节,用于持久化和网络传输。持久化不难理解,对象会随着程序结束而结束,如果我们要存储对象中的数据信息时,可以使用数据库,也可以使用文件,而序列化就是将对象压缩成一组字节更便于存储。网络传输也是同样的道理。对象序列在要使用的时候反序列化就可以转为对象。不过序列化只将成员变量转化为相应的序列,静态的变量会被忽视掉。2,如何实现序列化
2017-10-21 18:30:07
154
原创 解决eclipse打不开的问题
重新安装了系统,原先所有的开发环境都归零了,不得不重新安装配置,这个过程中遇到一个问题,就是eclipse打不开了,先前还是可以用的,不知道后来为什么却不行了,重装也不起作用,于是去看了一下工作空间下的.metadata/.log文件的内容!SESSION 2017-09-29 16:55:00.448 ---------------------------------------------
2017-10-02 18:38:38
12301
转载 35个Java代码性能优化总结
前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每
2017-09-27 21:50:15
163
原创 SSH框架的基础使用
1.首先创建一个web项目,导入jar包。这里没使用maven,所有的jar包都是自己添加的,有点多,当时后续的项目都会用到的。2.配置web.xml<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schem
2017-09-25 20:07:23
411
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人