随笔分类 -  设计模式

摘要:定义 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新操作;为数据结构中的每个元素提供多种访问方式,将对数据的操作与数据结构进行分离。 架构 抽象访问者:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作,该操作中的参数类型 阅读全文
posted @ 2021-07-25 17:06 有锦 阅读(3) 评论(0) 推荐(0) 编辑
摘要:作用 在不改变现有对象结构的前提下动态地给对象增加一些职责(即扩展功能) 架构 抽象角色、具体角色、抽象装饰角色(可以不用)、具体装饰角色 应用场景 1、当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充的时。举个例子,一个类被隐藏或者这个类是终极类(final修饰的类)或者采用继承 阅读全文
posted @ 2021-07-25 16:40 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 利用共享技术支持大量对象的复用、通过共享已经存在的对象来大幅度减少需要创建对象的数量,换句话说相同的对象只保留一份。 本质 缓存共享对象、降低内存消耗 架构 抽象享元角色、具体享元角色、非享元角色、享元工厂角色 代码 AbstrctFlyWeight(抽象享元) /** * * Descrip 阅读全文
posted @ 2021-07-25 16:20 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 完成一个流程有多种策略,择优; 定义一系列规则,并将每个规则封装起来,使它们可以相互替换,并且规则的变化不会影响执行规则的对象,通过对规则的封装把规则的条件和规则的结果分割开。 架构 抽象策略:各种不同的规则以不同的方式实现这个接口,环境角色使用这个接口调用不同的规则; 具体策略:实现了抽象策 阅读全文
posted @ 2021-07-23 22:21 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 对有状态的对象,把复杂的判断逻辑提取到不同的状态对象中,允许其状态对象在其内部状态发生改变时改变其行为; 架构 环境类:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换; 抽象状态:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为; 阅读全文
posted @ 2021-07-23 21:47 有锦 阅读(5) 评论(0) 推荐(0) 编辑
摘要:定义 只创建一个对象 模式 懒汉模式:调用类中的实例化方法的时候才创建 饿汉模式:类加载的时候就进行对象的创建 简单说,创建对象的顺序不一样; 扩展 可以将多个单例存放到链表中,当需要使用的时候直接从链表中拿就可以了 代码 SingletonHungry(饿汉模式) /** * * Descript 阅读全文
posted @ 2021-07-23 21:29 有锦 阅读(0) 评论(0) 推荐(0) 编辑
摘要:定义 创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中,满足“创建与使用相分离”;在简单工厂模式中创建实例的方法通常为静态(static)方法; 架构 抽象产品、具体产品、简单工厂 代码 Bee(抽象产品) public interface Bee { String produ 阅读全文
posted @ 2021-07-23 21:19 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 由于某些原因需要给某对象提供一个代理以控制对该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 架构 抽象主题类、真实主题类、代理类 分类 {静态代理:手动创建代理类 {动态代理:使用反射动态创建 作用 保护真实对象,增强真实对象 代码 Su 阅读全文
posted @ 2021-07-23 21:01 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 本质就是实现一个对象的克隆,Java自带的原型模式基于内存二进制流的复制,比new一个对象的性能更好;Object的clone()方法就可以实现原型 --克隆体; 简述 如果需要多个实例,可以通过创建一个实例然后通过克隆的方式来快速得到多个相同或相似的实例,因为创建实例需要的时间和资源比复制要 阅读全文
posted @ 2021-07-23 20:33 有锦 阅读(4) 评论(0) 推荐(0) 编辑
摘要:定义 多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并执行相应的行为;有点消息队列的意思 架构 抽象主题:提供一个用于保存订阅者对象的聚集类和增加、删除订阅者对象的方法,以及通知所有订阅者的抽象方法; 具体主题:实现抽象主题中的通知方法,当具体主题的内部状态 阅读全文
posted @ 2021-07-23 19:53 有锦 阅读(4) 评论(0) 推荐(0) 编辑
摘要:定义 定义一个操作中的算法骨架,将算法中的一些步骤延伸到子类,使得子类可以不改变算法结构的情况下重新定义该算法的某些特定步骤 架构 模板:模板中定义抽象方法(子类重写)和基本方法(非抽象方法,子类可直接调用); 扩展 应用场景 1、算法整体步骤固定,其中个别容易改变的时候可以使用模板方法模式将容易改 阅读全文
posted @ 2021-07-23 00:16 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后需要时能够将该对象恢复到原来保存时的状态,类似于事务回滚,本质就是可以有一次后悔操作。 架构 发起人:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的方法,可以访问备忘录里的所有信息; 备忘录:负责 阅读全文
posted @ 2021-07-22 23:53 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 定义一个中介对象来封装一系列对象之间的交互,使原有对象解耦,且可以独立的改变它们之间的交互。 架构 抽象中介者:是中介者的接口,提供同事对象注册与转发同事对象信息的抽象方法; 具体中介者:定义一个容器来管理对象,协调各个同事角色之间的交互关系,因此依赖于同事角色; 抽象同事:保存中介者对象,提 阅读全文
posted @ 2021-07-22 23:30 有锦 阅读(1) 评论(0) 推荐(0) 编辑
摘要:定义 提供一个对象来顺序访问聚合对象中的所有数据,不暴露聚合对象的内部表示 架构 抽象聚合:定义操作【存储、添加、删除】聚合对象以及创建迭代器对象 具体聚合:返回一个具体的迭代器; 抽象迭代器:定义访问和遍历聚合元素的接口,通常包含hasNext()、first()、next() 等方法; 具体迭代 阅读全文
posted @ 2021-07-21 21:58 有锦 阅读(5) 评论(0) 推荐(0) 编辑
摘要:定义 只考虑一种产品的生产,即工厂方法模式只考虑同等级的产品,用户只需要知道工厂的名字就可以创建相应的产品 架构 抽象工厂、具体工厂、抽象产品、具体产品 代码 Factory(抽象工厂) public interface Factory { NewBee make(); } FactoryA(具体工 阅读全文
posted @ 2021-07-21 21:23 有锦 阅读(5) 评论(0) 推荐(0) 编辑
摘要:这个模式挺简单的,理念有点像组合模式,“通过一个对象的行为去操作一批对象的行为”,但实现方式上面比组合模式简单。 定义 一个高层接口,包含对各个子系统的引用,客户端可以通过这个接口访问各个子系统; 架构 外观角色、子系统 代码 Facade /** * * Description: * 外观角色 * 阅读全文
posted @ 2021-07-20 22:23 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 将对象组合成树状的层次结构,用来表示“整体-部分”的关系 使用户对单个对象和组合对象具有一致性 根节点–树枝节点–叶子节点 根节点和树枝节点的本质是一种数据类型,可以作为容器使用,叶子节点和树枝节点不属于一种类型;组合模式中将树枝节点和叶子节点看作是同一种数据类型(用统一接口定义)让他们具有一 阅读全文
posted @ 2021-07-18 23:12 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 将一个请求封装成一个对象,使发请求的责任和处理请求的责任分隔开,这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加和管理。 架构 抽象命令类:声明执行命令的接口,拥有执行命令的抽象方法(接口中声明一个执行命令的方法); 具体命令类:抽象命令类的具体实现类,拥有接收者 阅读全文
posted @ 2021-07-18 00:21 有锦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:定义 为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生的时候,可以将请求随着你制定好的链条进行传送,知道链路中的某一环处理为止,通常情况下,可以通过数据链表来实现职责链模式的数据结构。(请求在一条链路中传递,被链路中某个 阅读全文
posted @ 2021-07-09 16:16 有锦 阅读(6) 评论(0) 推荐(0) 编辑
摘要:定义 将一个复杂对象的构造与它的表示分离开,使同样的构建过程可以创建不同的表示。 它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建成最终的对象。它将变与不变分离开,即产品的组合不变,但每一部分可以灵活的选择。 和工厂方法模式的区别 建造者模式注重零部件的组装过程,工厂方法模式更注重零部件的 阅读全文
posted @ 2021-07-09 15:40 有锦 阅读(3) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示