设计模式
文章平均质量分 97
设计模式
墩墩分墩
博主的一天很枯燥,吃吃饭、睡睡觉、健健身、跑跑步、打打王者、养养猫、溜溜狗、写写博客、打打豆豆啥的。。。。。。
展开
-
【设计模式】行为型模式—迭代器模式(Iterator Pattern)(二十三)
**迭代器模式(Iterator Pattern)又称为游标者模式(Cursor Pattern)。迭代器模式剥离集合对象迭代行为到迭代器中,并提供统一的访问接口**- **意图** :分离集合对象的遍历`行为(功能)`,,**即我们无需关心该集合的底层结构是什么样子的。只要拿到相应的迭代器就可以遍历这个对象。**- **主要解决**:1.为遍历不同的聚合结构提供一个统一的接口 2.通过该接口实现不同的方式来遍历聚合对象。>**一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器原创 2021-08-18 14:08:43 · 229 阅读 · 2 评论 -
【设计模式】行为型模式—中介者模式(Mediator Pattern)(二十二)
**中介者模式(Mediator Pattern)又称为调节者模式或者调停者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。主要目的就是降低多个对象和类之间的通信复杂性。**- **核心思想**:通过中介者对象解耦各层级对象的直接耦合,层级对象的对外依赖全部交由中介者转发。- **简单来说**: `对象之间不直接交互,通过中介者来进行交互`原创 2021-08-15 16:36:26 · 221 阅读 · 0 评论 -
【设计模式】行为型模式—访问者模式(Visitor Pattern)(二十一)
**访问者模式(Vistor Pattern)是用于数据结构与数据操作分离的一种设计模式。是指封装一些作用于某种数据结构中的各种元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作,。**- 对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),**对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有所不同。**- `将数据结构与数据操作(访问者角色)分离`。使得对元素的操作具备优秀的扩展性,我们可以`通过扩展不同的访问者实现不同操作原创 2021-08-13 17:05:28 · 163 阅读 · 0 评论 -
【设计模式】行为型模式—备忘录模式(Memento Pattern)(二十)
**备忘录模式(Memento Pattern)又称之为`快照模式(Snapshop Pattern)`或者`令牌模式(Token Pattern)`,是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样我们就可以在需要的时候将该对象恢复到原先保存的状态了**- 备忘录模式可以为我们提供一种“后悔药”的机制,它通过存储系统中各个历史状态的快照,使得我们可以在任一时刻将系统回滚到历史状态。- 核心: 保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状原创 2021-08-12 17:52:29 · 327 阅读 · 0 评论 -
【设计模式】行为型模式—命令模式(Command Pattern)(十九)
**命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作。首先请求的一方发出请求要求执行一个操作,然后接收的一方收到请求,并执行操作。**- 命令模式**解耦了`请求方`和`接收方`**,请求方只需要发送命令而不需要关心命令是如何被接收的,不关心命令怎么操作,也不关心命令是否被执行等。- **核心思想**:将命令或者请求封装成对象,`通过一个中间层来解耦请求调用者和请求最终执行者`- **`命令模式的使用场景有限了解思想即可`**原创 2021-08-10 17:00:56 · 329 阅读 · 0 评论 -
【设计模式】行为型模式—状态模式(State Pattern)(十八)
**状态模式(State Pattern)也称为状态机模式(State Machine Pattern),当控制一个`对象状态的条件表达式过于复杂`的时候,就可以考虑使用状态模式,通过把状态的`判断逻辑`转移到表示不同状态的一系列类中,这样就可以把复杂的逻辑简单化,使得对象的行为依赖于它的状态,并且会随着状态的改变而同时改变行为。**。- 所谓**对象的状态**,通常指的就是**对象实例的`属性的值`**;而**行为指的就是`对象的功能`**,再具体点说,行为大多可以 **`对应到方法上`**。原创 2021-08-10 10:10:50 · 265 阅读 · 0 评论 -
【设计模式】行为型模式—解释器模式(Interpreter Pattern)(十七)
**解释器模式(Interpreter Pattern) 用于构造一个简单的语言解释器,将字符串按照自定义的方式解释执行 ,是一种不常用的设计模式**- 除非从事底层开发自己需要去定义较为复杂的表达式,`否则基本上不同这个设计模式`- 在项目中,`可以使用Jruby,Groovy、java的js引擎来替代解释器的作用`,弥补java语言的不足。也可以使用开源工表达式解析工具` Expression4J、 MESP(Math Expression String Parser)、Jep `等开源的解析工具包原创 2021-08-04 14:52:10 · 267 阅读 · 0 评论 -
【设计模式】行为型模式—观察者模式(Observer Pattern)(十六)
**观察者模式(Observer Pattern)又称为`发布/订阅(Publish/Subscribe)模式,`在对象之间定义了一对多的依赖关系,当一个对象改变状态,依赖它的对象会收到通知并自动更新.**- 观察者模式无外乎2个操作,观察者订阅自己关心的`主题(Subject)`和`主题有数据变化后通知观察者们`。- 核心:`那就是一定有一个地方存放了所有的观察者,然后在事件发生的时候,遍历观察者,调用它们的回调函数。`- 实际生产过程中,观察者模式往往用`消息中间件来实现`,如果要实现**单机观察原创 2021-08-02 16:41:37 · 394 阅读 · 0 评论 -
【设计模式】行为型模式—责任链模式(Chain of Responsibility Pattern)(十五)
责任链模式(Chain of Responsibility Pattern)设计模式GOOD!!!-bobokaoya Good-设计模式-003-不够23种-kongfanyu 菜鸟设计模式 设计模式总结一篇文章搞定 设计模式GOOD2 设计模式GOOD3 设计模式-微信-一篇文章搞定 文章目录前言一.模板模式二.模板模式适用场景二.模板模式角色三.模板模式的实现方式四.总结1.模板模式的优缺点2.模板模式在开发中的应用场景前言.原创 2021-07-31 18:21:43 · 211 阅读 · 2 评论 -
【设计模式】行为型模式—策略模式(Strategy Pattern)(十四)
**策略模式(Strategy Pattern)是当有多种算法且调用和返回方式相似的情况下,仅类型不同时,可以通过该模式将其封装起来,让它们之间可以互相替换。** - `策略模式可以用于改造代码中的if-else逻辑`- **抽象策略角色(Abstract Strategy)**:通常为`接口 或 抽象类`,定义每个策略必须具有的方法和属性。- **具体策略角色(Concrete Strategy)**:`具体实现抽象策略中的接口`,编写具体的业务逻辑- **策略上下文角色/环境角色(Context原创 2021-07-28 11:09:08 · 365 阅读 · 0 评论 -
【设计模式】行为型模式—模板模式(Template Pattern)(十三)
**模板模式(Template Pattern)也叫模板方法模式,指在抽象类中将业务逻辑划分为多个方法,通过模板方法中调用这些方法后,组成完整的业务处理流程。子类只需重写相关方法实现,即可实现同一流程的不同处理方式**- **模式动机**:许多业务有着相同的执行步骤,这些步骤中有许多是相同的代码实现,部分步骤是不同代码的实现。`此时就可以在抽象类中定义所有的步骤,提供程序的方法主入口。由抽象类来实现通用的步骤方法,抽象类无法实现的具体步骤交给子类来实现原创 2021-07-26 16:38:54 · 256 阅读 · 0 评论 -
【设计模式】结构型模式—享元模式(Flyweight Pattern)(十二)
**享元模式(Flyweight Pattern)是 "资源池技术"实现方式,主要用于`减少创建对象的数量`**- **模式动机**:在创建大量对象时,有可能会造成内存溢出,享元模式把其中共同的部分抽象出来,保存在内存中,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。- 解决思路:复用对象最简单的方式是,用一个 HashMap 来存放每次新生成的对象。每次需要一个对象的时候,先到 HashMap 中看看有没有,如果没有,再生成新的对象,然后将这个对象放入 HashMap 中原创 2021-07-25 23:18:18 · 311 阅读 · 2 评论 -
【设计模式】结构型模式—桥接模式(Bridge Pattern)(十一)
**桥接模式(Bridge Pattern)也叫做桥梁模式, 使用`组合`代替继承建立类之间的关系,将抽象和具体实现解耦,使得两者可以独立地变化。****桥接模式也是通过`组合`来实现的**。**解耦的实质**—就是 **`减少对象之间的关联`,而`继承是一种 "强关联"`,一旦通过继承,`子类就会拥有父类所有公开的方法和属性`,有些可能并不是子类需要的,而 “组合” 就不一样,`组合是一种 "弱关联"`,只是`持有一个对象`且持有对象所拥有的功能并不是我的,和我并没有很强烈的关系。原创 2021-07-25 17:02:27 · 539 阅读 · 3 评论 -
【设计模式】结构型模式—组合模式(Composite Pattern)(十)
组合模式(Composite Pattern)也称之为整体-部分(Part-Whole)模式。核心是通过将`单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示`,组合成`树形结构`,使得`单个对象(即叶子对象)`和`组合对象(即容器对象)`的使用具有一致性。- 它将对象以`树形结构`表示,`最顶层`的节点称为`根节点`,根节点下面可以包含`树枝节点`和`叶子节点`,`树枝节点下面又可以包含树枝节点和叶子节点`原创 2021-07-22 17:22:43 · 287 阅读 · 2 评论 -
【设计模式】结构型模式—装饰器模式(Decorator Pattern)(九)
1.不改变原有对象结构的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)。符合开闭原则,对拓展开发,对修改关闭2.模式动机:一般有`继承或者关联方式`可以实现给一个类或对象增加`行为(方法)`3.装饰者模式提供了一种`新的类扩展方式(继承关系的一个替代方案)`,不会破坏原类的封装性。可以在不需要创造更多子类的情况下,将对象的功能加以扩展。这就是装饰器模式的模式动机。原创 2021-07-21 18:36:54 · 268 阅读 · 2 评论 -
【设计模式】结构型模式—外观模式/门面模式(Facade Pattern)(八)
**门面模式(Facade Pattern),又被称之为外观模式。该模式提供一个统一的接口,用来访问相同子系统或者不同子系统之中的一群接口。使得子系统更加容易调用。**- 可以理解为将多个接口功能组合到一个接口中,使得客户只要调用一个接口,而不用调用多个接口就能达到目的。避免外部直接访问具体的业务方法- 解决多个复杂接口带来的使用困难,起到简化用户操作的作用原创 2021-07-21 14:53:36 · 281 阅读 · 0 评论 -
【设计模式】结构型模式—代理模式(Proxy Pattern)(七)
**代理模式(Proxy Pattern)是指用一个代理类来包装具体实现类,由代理类代替目标类执行,从而为目标类增加一些额外的功能、处理**- 简单说就是:在操作一个对象和对象中的方法时,不是直接操作这个对象,而是通过一个代理对象来操作这个目标对象,在调用代理方法前后或者抛出异常增加一些额外处理- `Sping AOP(面向切面编程)`底层就是动态代理实现的。**应用场景**- 一般是需要在执行某个已经写好的方法前后添加一段逻辑,比如执行方法前打印日志,或者在执行方法之后打印方法的执行时间,诸如此原创 2021-07-19 13:40:30 · 212 阅读 · 0 评论 -
【设计模式】结构型模式—适配器模式(Adapter Pattern)(六)
**适配器模式本质**:- **原有类方法较难修改或修改风险较高,调用者类又必须使用原有代码功能,但是无法遵守原有方法的接口标准;为了`保持开闭原则,避免对原有类的修改`,可以使用适配器模式作为调用方类和原有功能之间的桥梁。**- 在适配器模式中可以定义一个`包装类xxxAdapter`,`包装不兼容接口的对象`,这个包装类指的就是`适配器(Adapter)`,它所包装的对象就是`适配者(Adaptee)`,即`被适配的类`。 - 也就是说:当调用者类调用适配器的方法时,`在适配器(Adapter)类原创 2021-07-19 11:46:23 · 290 阅读 · 1 评论 -
【设计模式】创建型模式—原型模式(Prototype Pattern)(五)
通过new创建的对象是非常繁琐的(类加载判断,内存分配,初始化等),当直接创建对象的代价比较大时,可以采用原型模式(Prototype Pattern)。`通过克隆已存在的对象,减少重新创建对象的时间开销`1. 在需要一个类的`大量对象`的时候,使用原型模式,因为原型模式是`在内存中对这个对象进行拷贝`,要比直接new这个对象性能要好很多。2. 如果一个对象的初始化需要很多`其他对象的数据准备或其他资源的繁琐计算`,使用原型模式,这样创建新的对象的时候,可以避免其他原创 2021-07-17 16:34:45 · 187 阅读 · 2 评论 -
【设计模式】创建型模式—建造者模式(Builder Pattern)(四)
**建造者模式(Builder Pattern)也叫 "生成器模式",”对象构建时非常复杂,且有很多步骤需要处理时,可以使用`多个简单的对象一步一步组装成这个复杂对象`。**1. **产品(Product)**:一个`具体`的产品对象2. **抽象建造者(Builder)**:建造者的抽象类,规范产品对象的各个组成部分的建造,`一般由子类实现具体建造过程`3. **具体建造者(ConcreteBuilder)**:`具体`的建造者,根据不同的业务逻辑,具体到各个对象的各个组成部分的建造4. **建原创 2021-07-17 11:01:00 · 202 阅读 · 2 评论 -
【设计模式】创建型模式—工厂模式(Factory Pattern)(三)
工厂模式作为一种创建型模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度简单工厂(不属于GoF的23种设计模式) 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码) 适用于工厂类负责创建的对象较少的场景。虽然某种程度不符合设计原则,但实际使用最多。工厂方法 用来生产同一等级结构中的固定产品原创 2021-07-16 10:34:51 · 244 阅读 · 4 评论 -
【设计模式】创建型模式—单例模式(Singleton Pattern)(二)
- 解决问题:避免一个全局使用的类频繁地创建与销毁- 如何解决:判断是否已经有这个单例,如果有则返回,如果没有则创建。- 关键代码: 1.将类的构造函数设为私有。 类的静态方法仍能调用构造函数, 但是其他对象不能调用。 2.在类中添加一个私有静态成员变量用于保存单例实例。 3.声明一个公有静态方法用于获取单例实例。 4.在静态方法中实现"延迟初始化"。 该方法会在首次被调用时创建一个新对象, 并将其存储在静态成员变量中。 此后该方法每次被调用时都返回该实例。原创 2021-07-15 11:42:13 · 247 阅读 · 0 评论 -
【设计模式】软件设计7大原则以及23种设计模式初识(一)
设计模式是对大家**实际工作中写的各种代码进行高层次抽象的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。**,其中最出名的当属` Gang of Four (GoF) 的分类`了,他们将设计模式分类为` 23 种经典的模式`,根据用途我们又可以分为三大类- 创建型模式(Creational Patterns)- 结构型模式(Structural Patterns)- 行为型模式(Behavioral Patterns)原创 2021-07-14 15:45:02 · 721 阅读 · 0 评论