
设计模式
文章平均质量分 70
dynamo2120
平凡坚持到底就是伟大
展开
-
生活中的面向对象
感悟:要想成为合格工程师,必须拥有面向对象思维 初工程师和高级工程师以及架构师最大的区别就是等级越高看问题的角度就不一样,犹如初级工程师写系统完全就是面向过程 if else写满整个类,而且类之间的耦合性很大,不好维护,牵一发而动全身,扩展性很不好。他们站在角度就是能完成功能需求,但是高级工程师以及架构师站在项目角度,考虑未来需求变化和如何做到可维护性、可复用、可扩展(当然这里从代码层面,...原创 2018-09-15 16:08:35 · 1012 阅读 · 1 评论 -
设计模式之建造者模式
建造者模式概念将构建一个复杂对象分成几个部分(多道工序),构建步骤顺序不一致会导致对象表示不同,原来我们直接 A a = new A(); a.setXXX() … A类有很多属性,如果后面需要修改构建步骤顺序时,改动量就很大。建造模式:当创建复杂对象时,将对象的组成部件和装配这些部件方式(组装部件顺序)分离开,这样灵活的建造对应的对象。对象的构建和对象的表示进行分离。使用场景(1)相同...原创 2018-09-28 15:56:44 · 161 阅读 · 0 评论 -
设计模式之组合模式
分公司=一个部门概念类图代码实例概念分公司=一个部分 把分公司看成一个部门,而分公司又可以有其他分公司和部门 …,这里介绍一种适合这种场景的设计模式那就是组合模式。组合模式:将对象组合成树形结构以表示 部分-整体的层次结构。组合模式使用户对单个对象和组合对象的使用具有一致性。类图Company:公司的抽象类(Component)ConcreteCompany:具体公司类 ...原创 2018-10-14 10:59:34 · 422 阅读 · 1 评论 -
设计模式之状态模式
替换繁琐if else和多状态转换概念使用场景类图代码实例概念一个对象中存在多种状态,并且不同的状态下对象有不同的行为操作,传统的实现方式就是if else 分支条件就是不同的状态,分支内容就是对应状态下的操作。 如果对象仅仅有一两个状态,不复杂还行。当状态很多且状态转换很复杂时就需要考虑使用状态模式状态模式:抽象出一个状态接口,if else分支中的条件对应不同的状态子类,将...原创 2018-10-10 08:11:40 · 192 阅读 · 0 评论 -
设计模式之适配器模式
复用已有代码来完成现有功能概念使用场景类图代码实例概念适配器: 我们国家使用的电脑和手机充电必须在220V电压进行的,但是有些国家例如泰国的电压就达不到220V这个时候我们就需要使用电源适配器进行将低电压转换成高电压。 适配器就是使用一个东西适合另一个东西的东西。使用场景例如原来系统某类一些功能和现有逻辑类似,因此我们想要复用代码,但是又要满足现有接口。 一个类需要实现现有接...原创 2018-10-10 18:09:25 · 166 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式概念使用场景类图代码实例概念屏蔽了具体集合、数组、列表的遍历方式和具体遍历的对象, 是一种获取集合中元素的一种方式。 提供一个抽象迭代接口,里面有 hashNext() 是否有下一个元素, next()下一个元素,first()获取第一个元素等方法。 这个迭代接口由具体集合来实现,并返回一个迭代器,上层不需要关心迭代的对象是什么以及内部是以何种方式(逆序还是顺序方式)。...原创 2018-10-19 21:49:39 · 219 阅读 · 0 评论 -
设计模式之单例模式
类的计划生育(单例模式)概念类图代码实例概念允许类产生仅且只有一个对象,如何在多线程环境下实现这一功能应该是这个类来控制的,所以需要实现产生单个实例关键点有以下几点1、构造器设置为private2、有一个包含本来的字段,并且是static类型,如果采用double check方式还需要增加volatile修饰保证可见性和有序性3、创建对象的时机(类一加载时就创建这个实例是饥饿式...原创 2018-10-19 22:48:40 · 128 阅读 · 0 评论 -
设计模式之桥接模式
类与类之间的桥梁(桥接模式)概念类图代码实例概念将抽象部分和实现部分分离出来,使它们可以独立变化。这里抽象部分和实现部分通俗意思是指,当一个软件系统中可以多个角度进行分类时,每一种分类都会发生改变,那么把这种角度分离出来,让它们独立变化,减少彼此之间的依赖。例如:根据从手机品牌角度来分类的话 可以有M品牌 N品牌都是继承与手机品牌,然后想给这些品牌加上相应的软件功能:然后手机M品牌...原创 2018-10-24 23:16:23 · 181 阅读 · 0 评论 -
设计模式之责任链模式
责任链模式概念类图代码实例概念例如不同层级的领导,审批权限不一样,不同的请假请求会流向不同的管理层,如果使用传统的方式 if else实现,这样在类中写很多逻辑,不易维护,违反了单一职责,当增加新的层级管理层进而导致修改类,不符合开闭原则。将各个分支条件转好成各个类,并抽出一个抽象管理类,如果类A没有权限处理该请求那么就会交给下个管理类进行处理,此时类A仅仅包含下个处理类。 通过这...原创 2018-11-29 20:26:34 · 167 阅读 · 0 评论 -
代理模式(静态代理和动态代理原理分析)
控制对象访问权限概念类图代码实例和装饰者区别概念为其他对象提供一种代理以控制这个对象的访问,在某些情况下一个对象不能直接访问那个对象时,代理就起到了客户端和被代理对象(委托类)中介作用。 代理类和委托类都有同样接口。好处:可以不用动原来类的逻辑,再次增加一些功能,符合开闭原则。真正的业务还是交给被代理对象处理的,因此在其委托被代理对象处理业务前后实现一些公共逻辑服务,例如加入缓...原创 2018-09-23 09:55:00 · 5271 阅读 · 0 评论 -
设计模式之观察者模式(委托机制)
观察者模式和发布/订阅模式概念观察者模式和发布/订阅模式区别为什么要使用委托机制观察者模式和委托机制类图观察者模式和委托机制代码实例概念观察者模式是一种一对多的依赖关系,让多个观察者对象同时监听同个主题对象。当这个主题对象在状态发生变化时,会同时所有注册到主题对象的观察者对象,使他们能够自动更新自己。观察者模式和发布/订阅模式区别观察者模式:比较概念的解释是,目标和观察者是...原创 2018-10-05 12:32:55 · 388 阅读 · 0 评论 -
装饰者模式
给类添加额外的功能概念类图代码实例概念如果想要给类添加其他逻辑的话,在不改动原来核心功能的情况下,采用装饰者模式,可以动态设定,并且按照想要的顺序来装饰核心功能。满足了开闭原则,如果增加修饰功能只需要扩展抽象装饰类就可以。 例如我们人”类” 尤其是女性喜欢使用各种各样的化妆品来打扮自己,人本身具有独特的样貌,然后采用各种修饰方式,穿好看的衣服、涂美白化妆品等修饰...原创 2018-09-17 14:53:10 · 199 阅读 · 0 评论 -
生产对象的工厂
简单工厂+工厂方法+抽象方法概念区别类图代码实例概念工厂的概念:用来生产产品的地方,同一种类型产品会有具体的不同产品对象。1、简单工厂:提供一个方法,根据客户端提供的参数创建对应的产品对象并返回,具体创建那种对象逻辑封装到工厂类中( 可以使用反射+配置文件 替代switch case)2、工厂方法:提供一个工厂抽象类用来产生该类产品类型对象,如果想产生具体产品对象则需创建一个...原创 2018-09-18 10:51:40 · 489 阅读 · 0 评论 -
策略模式
轻便更换策略概念类图代码实例概念当不同时间段,业务上会采取不同的策略,这个可以采用策略模式,将一种抽象计算方式通过一个Context类暴露给Client,然后在Context中会根据条件选择具体的算法实现策略。一种方式是通过客户端决定具体的算法策略通过Context()构造方法传入,还有一种方式通过简单工厂方式,传入一个type创建具体算法策略由Context决定,第二种方式更大降...原创 2018-09-18 10:53:50 · 134 阅读 · 0 评论 -
设计模式之原型模式
克隆对象概念浅复制和深复制类图代码实例概念原型模式就是我们常常接触的克隆,为了更高效更快的创建对象,无须再进行通过new来创建对象并初始化对象数据,直接通过拷贝内存的对象结构(浅复制),拷贝对象结构和数据(深度复制)进行创建对象。科普下,记得之前面试的时候被问知道那些创建对象的方式:1、new 构造方法进行创建2、反序列化方式3、clone克隆4、反射,cls.getCo...原创 2018-09-23 17:52:03 · 150 阅读 · 0 评论 -
设计模式之模板模式
代码复用概念好处和使用场景类图代码实例概念在各个子类中包含了很多相同的逻辑,而且这个逻辑在各个子类中并不会改变,因此把这些不变的行为搬到一个抽象类中,去除了子类中的重复代码。但是会有几个步骤随不同子类会有不同,这个时候就需要在抽象类提供几个抽象方法由子类提供不同实现。好处和使用场景模板模式提供了一个很好的代码复用平台,使用场景:就是当我们从整体流程由一系列步骤组成,但是有几个步...原创 2018-09-23 22:50:55 · 130 阅读 · 0 评论 -
设计模式之门面模式(外观模式)
门面模式概念何时使用类图代码实例概念当类A和多个类交互时,并且调用其方法很乱时,为了降低类之间的耦合性,符合迪米特最少知识法则,专门抽出一个类,并且提供出几个简单明了的接口给A类,那么具体的复杂方法调用交给此类进行管理,该类就是为门面类。何时使用在开发的时候,我们采用分层思想,控制层、逻辑层、持久层。每层之间使用门面类进行交互。 还有就是在开发过程中,使用各种设计模式导致有很多...原创 2018-09-26 18:19:07 · 711 阅读 · 0 评论 -
设计模式之备忘录模式
从头再来(备忘录)概念备忘录模式实现的三种方式类图代码实例概念备份对象状态,以便恢复到上一个状态。 通俗来说就是在对象(Originator发起人)执行某个动作之前先将状态(属性值)拷贝一份到一个备忘录(Memento备忘录)对象中,并且由一个管理者(Caretaker管理者)保管。 然后对象执行动作,执行完后又想要回到执行动作之前的状态,那么就是将被备忘录对象属性值重新再赋值给...原创 2018-10-12 10:44:54 · 231 阅读 · 0 评论 -
设计模式之命令模式
命令模式概念类图代码实例概念将一个请求(命令)封装成一个对象,从而具有不同请求(命令)供客户度选择,对请求排队、记录以及支持可重做和撤销操作好处:1、能很容易设计一个命令队列2、很容易记录每个命令的日志3、可以实现命令重做和撤销4、在不修改已有类情况下,很容易添加新命令类5、将请求一个操作对象和具体执行该操作的对象分离开,也就是下面讲到的将客户和烧烤人分开之间通过Wait...原创 2018-11-28 11:40:13 · 192 阅读 · 0 评论