
设计模式
GOF的23种设计模式
Ben同学
加油,坚持学习!
展开
-
23种设计模式总结
创建型模式(5种)什么时候考虑使用创建型模式?当我们需要创建对象时,可以考虑使用以下5个创建型模式中的一个.1.单例模式当我们只需要使用一个类对象就足以胜任它在项目中应当完成的所有工作时,我们就可以考虑将这个类设计成单例模式 .2.抽象工厂模式.当我们发现可以从所有实体类中抽出某个属性可以将实体类分类时(以手机为例,品牌就是可以抽出的属性),我们就可以考虑使用抽象工厂模式(该模式有...原创 2019-07-07 21:32:15 · 524 阅读 · 1 评论 -
设计模式:单例模式
先附上我的设计模式源码我的设计模式demo仓库1.饿汉单例模式优点:线程安全,调用效率高.缺点:不能延时加载/** * * @author 233admincol *@description 饿汉单例模式 *在创建这个类时就初始化静态类对象instance *缺点:如果只是加载本类,而不是调用getInstance(),甚至永远没有调用,则会造成资源浪费。 */pub...原创 2019-07-09 15:27:27 · 107 阅读 · 1 评论 -
设计模式:工厂模式(抽象工厂+简单工厂+工厂方法)
面向对象设计遵守的三大基本原则OCP开闭原则(open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭.DIP依赖倒置原则(Dependence Inversion Principle):要针对接口编程,不要针对实现编程.LOD迪米特法则(Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信.工厂模式的核心本质用工厂方...原创 2019-07-10 11:12:04 · 139 阅读 · 0 评论 -
设计模式:建造者模式
建造者模式建造者模式的本质分离了对象子组件的单独构建(由Builder来负责)和装配(由Director负责)。从而可以构建出复杂的对象,这个模式适用于:某个对象的构建过程复杂的情况下使用。于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象。相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。场景在肯德基的套...原创 2019-07-12 00:09:04 · 113 阅读 · 0 评论 -
设计模式:原型模式
原型模式什么是原型模式?原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。实现原理这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如:一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减...原创 2019-07-15 14:52:48 · 104 阅读 · 0 评论 -
设计模式:适配器模式
什么是适配器模式适配器模式作为7种结构型模式中的一种,其目的是将一个类的接口转换成客户希望的另一个接口,Adapter(适配器)模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.必须知道的三个角色需要适配的类(Adaptee):需要适配的类或适配者类。适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。目标接口(Target):客户所期待的接口。目标...原创 2019-07-29 13:21:00 · 98 阅读 · 0 评论 -
设计模式:代理模式
文章目录什么是代理模式AOP支持代理模式吗?代理模式的核心角色代理模式的应用场景代理模式的实现方式静态代理动态代理什么是代理模式代理模式:通过代理,控制对对象的访问。可以详细控制某个对象的方法,在调用这个方法前做前置处理,调用者这个方法后做后置处理。核心使用了AOP机制。AOP支持代理模式吗?AOP即面向切面编程,它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统...原创 2019-07-29 16:52:27 · 159 阅读 · 0 评论 -
设计模式:桥接模式
文章目录什么是桥接模式抽象化实现化解耦桥接模式的作用一个经典的桥接模式案例如何设计桥接模式桥接模式的总结什么是桥接模式桥接模式是7种结构型模式中的一种,用于把抽象化与现实化解耦,使得二者可以独立变化.它通过提供抽象化和现实化之间的桥接结构,来实现二者的解耦.抽象化其概念是将复杂物体的一个或几个特性抽出去,只需要注意其他特性的行动或者过程.在面向对象就是将对象共同的性值抽取出去而形成类的过程...原创 2019-07-29 17:44:24 · 271 阅读 · 0 评论 -
设计模式:组合模式
索引什么是组合模式组合模式必须知道的角色组合模式实现的关键部分组合模式工作流程分析模拟杀毒软件架构设计什么是组合模式组合模式就是把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象.组合模式必须知道的角色抽象构建(Component)角色:定义了叶子和容器构件的共同点,为组合对象提供统一的接口.叶子(Leaf)构件角色:表示子字节对象,容器(Comp...原创 2019-07-30 23:55:34 · 180 阅读 · 0 评论 -
设计模式:装饰模式(Decorator)
文章目录什么是装饰模式装饰模式的功能实现细节component抽象构建角色ConcreteComponent具体构件角色(真实对象)Decorate装饰角色ConcreteDecorator具体装饰角色经典案例:用装饰模式为车添加功能什么是装饰模式指的是在不改变现有对象结构的情况下,动态地给对象增加一些职责(即增加其额外功能)的模式.装饰模式的功能动态的为一个对象增加新的对象装饰模式是...原创 2019-08-02 13:09:16 · 117 阅读 · 0 评论 -
设计模式:外观模式(Facade)
文章目录什么是外观模式必须了解的迪米特法则外观模式的核心外观模式必须记住的三个角色门面角色客户角色子系统角色经典案例:电脑的开关机开发中常见的场景什么是外观模式外观模式就是指通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象.隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.为子系统中的一组接口提供了一个统一的访问接口.这个接口使得子系统更容易被访问或者使用.必须...原创 2019-08-02 19:03:26 · 191 阅读 · 0 评论 -
设计模式:享元模式(FlyWeight)
文章目录什么是享元模式实现享元模式需注意关于内部状态和外部状态必须知道的术语享元工厂(FlyWeightFactory):享元池:抽象享元类(FlyWeight):具体享元类(ConcreteFlyWeight):非共享享元类(UnsharedConcreteFlyWeight)经典案例:下棋游戏(围棋)使用场景什么是享元模式享元模式是指使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可...原创 2019-08-03 00:32:31 · 302 阅读 · 0 评论 -
设计模式:迭代器模式
文章目录什么是迭代器模式迭代器的角色构成正向遍历迭代器案例什么是迭代器模式迭代器模式就是可以提供一种可以遍历聚合对象的方式.又称为游标cursor模式.迭代器的角色构成迭代器角色:定义遍历元素所需要的方法,如获取下一个元素的方法next(),判断是否遍历结束的方法hasNext(),移除当前对象的方法remove().具体迭代器角色:实现迭代器接口中定义的方法,完成集合的迭代容器角色...原创 2019-08-26 10:20:48 · 179 阅读 · 0 评论 -
设计模式:中介者模式
文章目录什么是中介者模式中介者模式的思想使用的场景中介者模式的经典例子什么是中介者模式通过封装一系列对象的方式使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立的改变他们之间地交互.中介者模式的思想如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量多对多的关系,将导致关系及其复杂,这些对象称为"同事对象"我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,...原创 2019-08-26 16:24:45 · 162 阅读 · 0 评论 -
设计模式:命令模式
文章目录什么是命令模式模式组成结构举一个经典实例CommandReceiverConcreteCommandInvoke测试命令模式开发中常见的场景什么是命令模式命令模式就是将一个请求封装为一个对象,从而使我们可以通过对对象的调用对客户进行参数化.对请求排队或者记录请求日志,以及支持可撤销的操作模式组成结构Command抽象命令类定义统一命令的接口ConcreteComman...原创 2019-08-27 14:41:31 · 139 阅读 · 0 评论 -
设计模式:解释器模式
文章目录什么是解释器模式模式的主要组成解释器模式经典实例开发中常见的场景什么是解释器模式解释器模式就是一种不常使用的设计模式,用于描述如何构成一个简单语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计.当需要开发一种新的语言时,可以考虑使用解释器.尽量不要使用解释器模式,后期维护会很麻烦,在项目中,可以使用jruby,groovy,Java的js引擎来替代解释器的作用,弥补Jav...原创 2019-08-27 16:04:39 · 99 阅读 · 0 评论 -
设计模式:访问者模式
文章目录什么是访问者模式模式主要组成访问者模式经典实例什么是访问者模式访问者模式:对于存储在一个集合中的对象,它们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问方式也有所不同.定义:表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变元素的类的前提下定义作用于这些元素的新操作.模式主要组成Visitor表示...原创 2019-08-27 17:18:34 · 185 阅读 · 0 评论 -
设计模式:策略模式
文章目录什么是策略模式非策略模式实现的优劣模式主要组成实现策略模式的经典案例什么是策略模式策略模式对应解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一个问题,同时可以方便的更换算法或者增加新的算法,并且由客户端觉得调用哪个算法。策略模式的本质就是分离算法,选择实现.案例:某个市场人员接到单后的报价策略(CRM系统中常见问题)。报价策略很复杂,可以简单作如下分类:普通...原创 2019-08-27 19:27:44 · 96 阅读 · 0 评论 -
设计模式:模板方法模式
文章目录什么是模板方法模式实现细节中心思想方法回调(钩子方法)使用场景经典实例什么是模板方法模式模板方法模式:定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现,这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。实现细节中心思想该模式处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,采用工厂方法模式,将这个节点的代码实现转移给子类完成。...原创 2019-08-28 14:06:55 · 216 阅读 · 0 评论 -
设计模式:状态模式
文章目录什么是状态模式角色构成开发中常见场景经典实例什么是状态模式状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。角色构成Context环境类,环境类中维护一个State对象,他是定义当前的状态。处理一些请求,这些请...原创 2019-08-28 20:35:55 · 151 阅读 · 0 评论 -
设计模式:观察者模式
文章目录什么是观察者模式使用场景自定义的观察者对象使用封装的观察者对象什么是观察者模式观察者模式:主要用于1:N的通知,当一个对象(目标对象Subecjt或Objservable)(消息发布)的状态变化时,它需要及时告知一系列对象(观察者对象,Observer)的状态变化时,它需要及时告知一系列对象(观察者对象,Observer)(消息订阅),令它们做出响应。通知观察者的方式:推送: 每次...原创 2019-08-30 00:33:18 · 177 阅读 · 0 评论 -
设计模式:备忘录模式(Memento)
文章目录什么是备忘录模式角色构成经典案例常用场景什么是备忘录模式备忘录模式:在不影响封装的前提下,捕获一个对象的状态,并在该对象之外保存此状态,以便之后可以恢复对象到此状态。保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。角色构成源发器类(Originator):负责创建一个备忘录Memento,用于记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。备...原创 2019-08-30 00:45:03 · 115 阅读 · 0 评论 -
设计模式:责任链模式(ChainOfResponsibility)
文章目录什么是责任链模式链表方式定义责任链非链表方式实现责任链添加新的处理对象经典案例什么是责任链模式责任链模式:将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。链表方式定义责任链如果try,catch一样,先判断第一个catch是否符合处理异常,如果不符合则交给下一个catch,依此类推...原创 2019-09-01 16:09:22 · 310 阅读 · 0 评论