迭代器模式(学习笔记)

1. 意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象内部表示 2. 动机 有时候,会使用不同的算法来遍历集合中的元素,不断地向集合中添加遍历算法会模糊其高效存储数据的主要职责。此外,有些算法可能是根据特定应用订制的,将其加入到泛型集合类中会显得非常奇怪。另一方面,使用多种集 ...

装饰模式(学习笔记)

1. 意图 动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活 2. 动机 在某些情况下,我们可能会“过度的使用继承来扩展对象的功能”。继承是静态的,无法在运行时更改已有对象的行为,只能使用由不同子类创建的对象来替代当前的整个对象;并且随着子类的增多(扩展 ...

组合模式(学习笔记)

1. 意图 讲对象组合成树形结构以表示“部分——整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性 2. 动机 如果应用的核心模型能用树状结构表示,在应用中使用组合模式才有价值 假如,有两类对象:产品和盒子。一个盒子可以包含几个产品或多个较小的盒子。这些小盒子也可以包含 ...

桥模式(学习笔记)

1. 意图 将抽象部分与它的实现部分分离,使它们可以独立的变化 2. 动机 如左图所示,如果此时需求变化,假设有n个形状(圆形,方形,长方形...),增加m个颜色,则需要额外增加(n+1)*m个类,会造成类爆炸。另外,代码后期维护成本很高。桥模式使用组合代替继承来解决这个问题。这样只会增加m个新类, ...

适配器模式(对象适配器学习笔记)

1. 意图 将一个类的接口装换成客户希望的另外一个接口 2. 动机 有时,为复用而设计的工具类不能够被复用仅仅是因为它的接口与专业应用领域所需要的接口不匹配。Adapter经常还要负责提供那些被匹配的类所没有提供的功能(有点类似装饰模式) 3. 适用性 想使用一个已经存在的类,而它的接口不符合你的需 ...

单例模式(学习笔记)

1. 意图 保证一个类只有一个实例, 并提供一个访问该实例的全局节点 2. 动机 控制某些共享资源(数据库或文件)的访问权限 为该实例提供一个全局访问点 3. 适用性 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 更严格的控制全局变量 4. 结构 5. 效果 1) 对唯一实例的受控访 ...

生成器设计模式(学习笔记)

1. 意图 将一个复杂对象的创建与它的表示分离,使得同样的创建过程可以创建不同的表示 2. 动机 软件系统中,有时候面临着一个复杂对象的创建工作,通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法相对稳定 如何应对这种变化? ...

工厂方法(学习笔记)

1. 意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 2. 别名 虚构造器(virtual constructor) 3. 动机(参考Design pattern) 框架使用抽象类定义和维护对象之间的关系。这些对象关系的创建也通 ...

PHP设计模式—职责链模式

博主头像 定义: 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 结构: Handler:抽象类,定义一个处理请示的接口。 ConcreteHandl ...

面向对象设计原则(学习笔记)

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次的使用该方案而不必重复劳动。 ——Christoper Alexander 设计原则是评判设计模式的一把标尺。 1. 依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于底层模块(变化),二者都是都应 ...

js里的职责链模式

博主头像 职责链模式 职责链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 该模式类似于调用原型方法一样:在该对象没有该方法时向上一个原型上寻找方法;该模式这是该方法无法处理这个请求时,用下一个方法处理该请求,这样形成一个链,每个方法都有可能被调用。 这里用一个表单验证做 ...

js里的模板方法模式

博主头像 模板方法模式 模板方法模式的定义:在一个方法里定义算法的骨架,将一些步骤延迟到其子类。 意思是用一个方法包装多个函数的调用,这个方法就是模板,函数的使用只需要跟着模板里的步骤进行即可,同时根据情况可以放入钩子函数来选择是否在指定位置执行函数。 算是JS的继承的一个主要用法。 //! 这就是冲饮料的模 ...

基于环形缓冲区的生产者消费者模式实现

一、生产者消费者模式 生产者消费者模式是一种用于解决多个模块之间数据通信问题的高效机制。通过在数据生产者和数据消费者之间设立数据缓冲区,实现地低耦合度的数据通信。 图1 生产者/消费者模式的结构 这样的一个结构就像是流水线上两道工序和他们之间的货架。前道工序上有若干工人,他们会将本工序的产品放到货架 ...

java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯

1.模型管理 :web在线流程设计器、预览流程xml、导出xml、部署流程 2.流程管理 :导入导出流程资源文件、查看流程图、根据流程实例反射出流程模型、激活挂起 、自由跳转 3.运行中流程:查看流程信息、当前任务节点、当前流程图、作废暂停流程、指派待办人 4.历史的流程:查看流程信息、流程用时、流 ...

十分钟全面理解Spring AOP

博主头像 什么是AOP AOP(Aspect-Oriented Programming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象 ...

js里的发布订阅模式及vue里的事件订阅实现

博主头像 发布订阅模式(观察者模式) 发布订阅模式的定义:它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 发布订阅模式在JS中最常见的就是DOM的事件绑定与触发: //todo 注册点击事件 btn.addEventListener("click", func ...

js里的迭代器模式

博主头像 迭代器模式 迭代器模式的定义:提供一个方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 简单来说就是实现对一个对象的迭代。。。 内部迭代器 这在ES6里已经有了原生的支持:[Symbol.iterator],该方法在所有的数组、Map、Set中都已经有了实现,所以可以通过for ...

js中的代理模式

博主头像 代理模式 代理模式的定义:为一个对象提供一个代用品或占位符,以便控制对它的访问 代理模式被运用到vue的响应式数据上,在ES6之前用Object.defineProperty,在ES6后使用Proxy来实现代理。 虚拟代理 虚拟代理用来收集某个时间内对代理对象的访问,在某个时间时把收集到的访问全部执 ...

设计模式:用实际案例讲解工厂模式

博主头像 工厂模式有啥用啊,我的项目没使用工厂模式也照样运行 这是我听过最令人哭笑不得的吐槽,这个程序猿的头发不知道有没有被自己薅秃 的确,项目中不使用工厂模式并不会影响项目的运行 但是,当项目后期需要二次开发时,代码的维护和修改的复杂度,绝对能让你恨不得把自己头发都薅秃 下面我们就来盘一盘工厂模式能解决哪些 ...

大话Java代理模式

博主头像 一、什么是代理 首先理解一下什么是代理。简单来说,代理就你要做一件事情,我替你把事情做了。这是现实生活中我们遇到的代理的需求场景。但写代码的时候对代理场景的需求,跟现实场景有点区别,本质上还是帮你做事(调用要执行的方法),但在代码世界里,如果仅仅只是把要调用的方法执行了,那完全没有必要再新建类(代理 ...

<123···7>