设计模式
栗中爆栗
这个作者很懒,什么都没留下…
展开
-
正则表达式
正则表达式正则表达式开发中使用正则表达式的流程正则表达式的基本语法标准字符集合自定义字符集合量词(Quantifier)字符边界匹配模式选择符合分组预搜索(零宽断言)Java中使用正则表达式测试正则表达式的基本用法测试正则表达式对象分组的处理测试正则表达式对象替换操作测试正则表达式对象的分割字符串操作网络爬虫取链接正则表达式正则表达式定义: -描述了一个规则,通过这个规则可以匹配一类字符串...原创 2019-11-30 17:54:15 · 127 阅读 · 0 评论 -
备忘录模式
备忘录模式场景备忘录模式核心观察者模式结构备忘录模式实现备忘点较多时开发中常见的场景场景录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,此时需要恢复上一个人的资料,再进行修改。Word文档编辑时,忽然电脑死机或断电,再打开时,可以看到word提示你恢复到以前的文档管理系统中,公文撤回功能。公文发送出去后,想撤回来。备忘录模式核心就是保存某个对象内部状态的拷贝,这样以后...原创 2019-11-26 18:24:02 · 119 阅读 · 0 评论 -
观察者模式
观察者模式观察者模式核心观察者模式实现使用Javase实现观察者模式观察者模式常见场景观察者模式核心观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或Observable)的状态变化时,他需要及时告知一系列对象(观察者对象,Observer),令他们做出响应。通知观察者的方式:-推:每次都会把通知以广播方式发送给所有观察者,所有观察者只能被动接收-拉:观察者只要知道有...原创 2019-11-26 17:53:09 · 120 阅读 · 0 评论 -
状态模式
状态模式状态模式核心状态模式结构情景状态模式实现开发中常见的场景状态模式核心用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题状态模式结构Context环境类环境类中维护一个State对象,它是定义了当前的状态State抽象状态类ConcerteState具体状态类每一个类封装了一个状态对应的行为情景酒店系统中,房间的状态变化:• 已预订• 已入住• 空...原创 2019-11-24 17:09:28 · 100 阅读 · 0 评论 -
模板方法模式
模板方法模式模板方法模式介绍模板方法模式核心场景模板方法模式实现方法回调(钩子方法)什么时候用到模板方法模式开发中常见的场景模板方法模式介绍模板方法模式是编程中经常用得到的模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。模板方法模式核心处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不...原创 2019-11-24 16:20:27 · 99 阅读 · 0 评论 -
策略模式
策略模式策略模式定义策略模式本质场景if_else实现策略模式实现开发中常见的场景策略模式定义策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选 一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法。并且 由客户端决定调用哪个算法策略模式本质本质:分离算法,选择实现场景某个市场人员接到单后的报价策略(CRM系统中常见问题)。报价策略很复杂,可以简单作如下分...原创 2019-11-23 12:50:34 · 216 阅读 · 0 评论 -
解释器模式/访问者模式
解释器模式/访问者模式解释器模式介绍开发中常见的场景访问者模式定义模式动机开发中的应用场景解释器模式介绍是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计、当我们需要开发一种新的语言时,可以考虑使用解释器模式尽量不要使用解释器模式,后期维护会有很大的麻烦,在项目中,可以使用Jruby、Groovy、java的js引擎来代替解释器...原创 2019-11-23 12:28:31 · 171 阅读 · 0 评论 -
命令模式
命令模式命令模式介绍命令模式结构命令模式实现开发中常件的场景命令模式介绍将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作,也称之为:动作Action模式、事务transaction模式。命令模式结构Command抽象命令类ConcreteCommand具体命令类Invoker调用者/请求者请求的发送者,它通过命...原创 2019-11-23 12:14:52 · 220 阅读 · 0 评论 -
中介者模式
中介者模式中介者模式核心中介者模式本质中介者模式实现中介者模式核心如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多 关系,将导致关系及其复杂,这些对象称为"同事对象"。我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化为如下的星形结构。中介者模式本质解耦多个同事对象之间的交互关系,每个对象都持有中介者对象的引用,只跟中介者对象打交...原创 2019-11-22 14:04:20 · 100 阅读 · 0 评论 -
迭代器模式
迭代器模式场景迭代器模式结构迭代器模式实现开发中常见的场景场景提供一种可以遍历聚合对象的方式。又称为:游标cursor模式聚合对象:存储数据迭代器:遍历数据迭代器模式结构聚合对象:存储数据迭代器:遍历数据迭代器模式实现自定义的迭代器接口:/** * 自定义的迭代器接口 * @author * */public interface MyIterator {...原创 2019-11-22 13:06:57 · 109 阅读 · 0 评论 -
责任链模式
责任链模式责任链模式定义场景责任链模式实现添加新的处理对象责任链模式开发中常见的场景责任链模式定义将能够处理同一类请求的对象连成一条线,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象场景- 公司里面,请假条的审批过程: • 如果请假天数小于3天,主任审批 • 如果请假天数大于等于3天,小于10天,经理审批 • 如果大...原创 2019-11-21 17:00:17 · 148 阅读 · 0 评论 -
享元模式
享元模式场景享元模式核心享元模式实现享元模式优点享元模式缺点场景-内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象, 我们可以通过享元模式,节省内存。享元模式核心-享元模式以共享的方式高效地支持大量细粒度对象的重用-享元对象能做到共享的关键是区分了内部状态和外部状态。内部状态:可以共享,不会随环境变化而改变外部状态:不可以共享,会随环境变化而改变享元模式实现-...原创 2019-11-20 17:40:49 · 100 阅读 · 0 评论 -
外观模式
外观模式外观模式核心外观模式实现注册公司流程不使用外观模式实现:注册公司流程使用外观模式:外观模式核心为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用外观模式遵循迪米特法则(最少知识原则):一个软件实体应当尽可能少的与其他实体发生作用关系外观模式实现注册公司流程不使用外观模式实现:注册公司流程使用外观模式:代码实现:工商局:public interfac...原创 2019-11-19 13:38:52 · 88 阅读 · 0 评论 -
装饰模式
装饰器模式装饰器模式的职责装饰器模式实现细节装饰器模式实现装饰器模式总结装饰模式和桥接模式的区别装饰器模式的职责-动态的为一个对象增加新的功能-装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀、装饰器模式实现细节-Component抽象构件角色: 真实对象和装饰对象有相同的接口。这样,客户端...原创 2019-11-18 16:45:39 · 103 阅读 · 0 评论 -
组合模式
桥接模式使用组合模式的场景组合模式核心组合模式工作流程分析组合模式基本结构组合模式实现使用组合模式的场景-把部分和整体的关系用树形结构来标识,从而使客户端可以使用统一的方式 处理部分对象和整体对象组合模式核心-抽象组件(Compinent)角色:定义了叶子和容器构建的共同点-叶子(Leaf)构建角色:无子节点-容器(Composite)构建角色:有容器特征,可以包含子节点组合模式工作...原创 2019-11-18 16:08:42 · 76 阅读 · 0 评论 -
桥接模式
桥接模式桥接模式要点场景以多层继承结构实现多层继承结构存在的问题桥接模式实现桥接模式总结桥接模式要点处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联、场景-商城系统中常见的商品分类,一电脑为例,如何处理好商品分类销售的问题以多层继承结构实现多层继承结构图:多层继承结构实现代码:/** * 问题: * -扩展性...原创 2019-11-17 14:07:56 · 69 阅读 · 0 评论 -
代理模式
代理模式核心作用AOP(面向切面编程)代理模式核心角色应用场景分类静态代理(静态定义代理类)动态代理(动态生成代理类)核心作用-通过代理,控制对对象的访问可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即:AOP的微观实现!)AOP(面向切面编程)-它是可以通过预编译方式和运行期动态带来实现在不修改源代码的情况下给程序动态统一添加功能的一种...原创 2019-11-16 17:20:51 · 84 阅读 · 0 评论 -
适配器模式
适配器模式什么是适配器模式适配器模式中的角色适配器模式实现什么是适配器模式-将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以在一起工作。适配器模式中的角色-目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口、-需要适配的类(Adaptee):需要适配的的类或适配者类。-适配器(Adapter)...原创 2019-11-15 20:06:00 · 66 阅读 · 0 评论 -
原型模式
原型模式原型模式(克隆模式/拷贝模式)原型模式实现原型模式(浅克隆)浅克隆模式存在的问题原型模式(深克隆)原型模式(深克隆实现方式一)原型模式(深克隆实现方式二)new方式创建对象与clone方式创建对象比较原型模式(克隆模式/拷贝模式)-通过new产生一个独享需要非常繁琐的数据准备或访问权限,则可以使用原型模式。-就是java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具...原创 2019-11-14 14:40:44 · 225 阅读 · 0 评论 -
建造者模式
建造者模式建造者模式的本质建造者模式实现建造者模式的本质-分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。-由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法 的解耦,实现...原创 2019-11-13 17:19:13 · 78 阅读 · 0 评论 -
工厂模式
简单工厂模式工厂模式工厂模式核心本质简单工厂模式合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入工厂模式-实现了创建者和调用者...原创 2019-11-12 15:52:26 · 143 阅读 · 0 评论 -
单例模式
单例模式实现方式饿汉式懒汉式双层检测锁式静态内部类式枚举单例如何选用存在问题通过反射的方式直接调用私有构造器通过反序列化的方式构造多个对象测试懒汉单例模式防止反射和反序列化漏洞测试多线程环境下五种创建单例模式方法的效率实现方式饿汉式饿汉式(线程安全,调用效率高。 但是不能延迟加载)package Singleton;/** * 测试饿汉式单例模式 * @author * */...原创 2019-11-10 15:28:29 · 82 阅读 · 0 评论 -
多线程 DCL单例模式
package others;/** * DCL单例模式:懒汉式套路基础上加入并发控制,保证在多线程环境下,对外存在一个对象 * 1、构造器私有化-->避免外部new构造器 * 2、提供私有的静态属性-->存储对象的地址 * 3、提供公共的静态方法-->获取属性 * * @author * */public class DoubleCheckedLock...原创 2019-10-07 14:58:36 · 255 阅读 · 0 评论 -
静态代理设计模式
package thread;/**静态代理公共接口:1、真实角色2、代理角色@author*/public class StaticProxy {public static void main(String[] args) {new WeddingCompany(new You()).happyMarry(); //new Thread(线程对象).start();...原创 2019-09-24 22:49:39 · 100 阅读 · 0 评论 -
装饰设计模式
package io03;/**模拟咖啡(装饰设计模式)1.抽象组件:需要装饰的抽象对象(接口或抽象父类)2.具体组件:需要装饰的对象3.抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法4.具体装饰类:被装饰的对象@author ly*/public class TestDacorate {public static void main(String[] args)...原创 2019-09-08 19:41:54 · 59 阅读 · 0 评论