设计模式
文章平均质量分 64
北半球先生
to be you want to be
展开
-
设计模式之六大原则
一、开闭原则所谓开闭原则就是对扩展开放,对修改关闭。在需求对程序进行扩展的时候不能对原代码修改,通常可以通过接口和抽象类来实现。二、里式转换原则里式转换原则中说,任何基类出现的地方,子类都可以出现。三、依赖倒转原则该原则是开闭原则的基础,针对接口编程。四、接口隔离原则使用多个接口比使用单个接口要好,目的在于松耦合。五、迪米特原则一个实体应该尽可能少的与其他实体发原创 2016-10-27 16:29:46 · 184 阅读 · 0 评论 -
状态模式
一、背景 相信大家都用过QQ,当我我们为在线状态的时候可以接收和发送消息,离线状态即发不了消息也收不到消息,离开状态只能接收消息。状态和行为紧密关联,如果我们要实现这样的场景怎么整?最直接了当的方法就是if else了,但是想过没有,如果新增了状态关联了新的行为,我们是不是得加if,或者说某个状态下的行为改变了,还得去修改该if 状态下的行为方法。这样非但程序的可阅读性会变得很差、可扩展...原创 2018-03-30 10:42:15 · 76 阅读 · 0 评论 -
桥接模式
一、背景 有没有想过,市场上存在那么多数据库(什么mysql ,oracle,sqlserver...),如果我们每连一种数据库都要去new一个对应的数据库驱动实例,想想会怎么样?如果数据库变了,怎么办?是不是还得去修改代码?是不是违反了开闭原则?二、概念 桥接模式:将抽象部分与实现部分解耦,使得二者可以独立变化。就像我们常用的JDBC桥DriverManager一样,JDBC...原创 2018-03-21 10:28:19 · 141 阅读 · 0 评论 -
迭代器模式
一、背景 试想现在有两家公司,你作为中间平台要去统计两家公司的人员信息,但是两家公司的统计方式不一样,你现在要提供给政府人力部门一个统计人力的功能,怎么搞?分别用两家公司的统计方式统计,然后在汇总给政府人力部门?感觉是不是有点重复?迭代器模式正是能解决这样的问题。二、概念 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素。而又不暴露对象中的内部表示。三、代码实例pac...原创 2018-04-08 10:40:00 · 136 阅读 · 0 评论 -
原型模式
一、背景 如果存在这么个场景,多个线层需要操作(读写)某一对象,但是每个线程之间希望互不影响。就像银行给客户发送邮件,邮件的模板都是一样的,我们可以抽象为一个邮件类,但是发送给每个人的称呼是不一样的,如果采用单线程发送,那么如果发送量比较大的话就会很慢。采用多线程发送,就会存在这样的问题,线程一还没发送,线程二就将邮件的称呼修改了,这样就会导致线程不安全的问题。原型模式正好能解决这样的问...原创 2018-03-26 11:11:09 · 141 阅读 · 0 评论 -
享元模式
一、背景 记得刚开始学java jdbc部分的时候,每次我们要操作数据库,都先要去创建一次数据库连接。想想如果是在实际的系统中,我们每次点击查询,增加,修改的操作,每次都要去重新创建数据库连接的话,那是得多慢,而且如果请求越多,创建的数据库连接是不是就越多?那么内存占用是不是就越多?享元模式就是来解决这种问题的。二、概念 享元模式:利用共享技术来支持大量的细粒度对象。也就是说...原创 2018-03-22 10:20:15 · 88 阅读 · 0 评论 -
中介者模式
一、背景 试想如果每台计算机之间通信,我们都在这两台计算机之间拉一根网线,如果多台计算机之间通信的话是不是就要每台(除了它自己)和其他的所有计算机拉一根网线,这样形就会形成复杂的网状结构,搭建网络的成本可想而知有多高。看到这里是不是想到了我们学计算机网络的时候通过星状结构便能解决此问题。多台计算机之间放一个路由器,每台计算机都和该路由器相连,计算机之间通信通过该路由器进行转发,这样便大...原创 2018-04-09 10:11:23 · 83 阅读 · 0 评论 -
组合模式
一、背景 相信大家都熟悉我们的目录及文件结构,我们的目录里面可以存放目录和文件,每层目录都可以在其中创建目录或者文件,每层目录操作的方式都是一样的,使我们用起来更方便简洁。试想如果每层目录的操作方式不一样,那是得多麻烦。组合模式正是应对这样的问题。二、概念 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。三...原创 2018-04-02 11:29:29 · 77 阅读 · 0 评论 -
策略模式
一、背景 相信大家对商场会员制都很熟悉,超级vip会员打八折,普通会员打九折,不是会员不打折,如果用代码实现的话,以前会直接暴力地if 超级vip打八折 if 普通会员 打九折..,如果这样条件和算法行为紧密地放在一起,到后面维护起来就会比较麻烦。策略模式正好来解决这样的问题。二、概念 策略模式是指对一系列的算法定义,并将各算法封装起来,相互之间可以替换。算法的变化独立于使用它...原创 2018-03-27 11:03:25 · 79 阅读 · 0 评论 -
解释器模式
一、背景 相信大家都知道四则运算,在金融行业,大大小小的模型都涉及比较复杂的运算,而且模型的不同使用的公式就不同,不同的公式需要的参数不同,所以我们不可能为每一个公式去写一个方法,或者定义一个类,那样的话会有无穷无尽的修改,添加,后期维护非常困难。解释器模式正好可以解决这样的问题。二、概念 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中...原创 2018-04-10 11:24:54 · 92 阅读 · 0 评论 -
建造者模式
一、背景 现在很多pc游戏对电脑的配置要求比较高,于是现在的很多玩家都喜欢选择组装的电脑,这样才能自主定义自己的性能要求。但是大多数计算机小白却不懂如何选型和组装,如果自己组装还得现学组装流程和一些硬件方面的知识。于是一些卖组装电脑的店家便出现了。用户只需要给他们描述自己想要个什么样的电脑,他们便给用户选型(cpu,主板,内存,显卡等等)并组装好给用户。这便是我们要说的建造者模式。二、...原创 2018-04-03 11:30:18 · 91 阅读 · 0 评论 -
外观模式(门面模式)
一、背景 如今,计算机是我们每个人最熟悉不过的了,但是启动一个计算机要经过哪些流程,可能除了计算机专业的同学,大多数普通用户不太知道,也不关心。只知道打开开机键就可以用了。试想,如果开机的内部流程让用户来操作,首先打开电源,然后启动cpu,启动内存,启动各种驱动...,这样用户是不是得疯。外观模式正是解决类似这样的问题。二、概念 外观模式:为子系统中的一组接口提供一个一致的...原创 2018-03-28 10:13:58 · 76 阅读 · 0 评论 -
备忘录模式
一、背景 记得以前玩游戏的时候,在打大boss之前,都会一路打小兵,打小boss,最后才会遇到大boss。但是我们可能不会一下打到大boss那里,中途可能有事或休息一下,那下次再来的时候我不可能再重头开始打吧,那样玩家肯定都不会再玩这款游戏了。那怎么办呢?当然是把我们玩的状态通过备忘录保存下来啊,下次再玩的时候读取备忘录的状态继续从我们之前停下的地方开始玩。这既是我们的备忘录模式。二、...原创 2018-03-29 09:56:22 · 133 阅读 · 0 评论 -
观察者模式
一、背景 试想现在有一个对象A的状态变了,另一个对象B要想知道A变了怎么办?在A中new 一个B实例 然后调用B的接收方法?如果另一个对象C也想知道呢?同样D也想知道呢?如果这样的话是不是耦合度太高了?所以观察者模式便产生了。二、概念 记得看谍战片的时候,双方都会派卧底到对方监视,当被监视者有所动作是,卧底便通知对方采取行动。类似的观察者模式也是这样,当一个对象发生变化时,...原创 2018-03-14 10:47:23 · 79 阅读 · 0 评论 -
责任链模式
一、背景 相信大家都到政府部门办过事情,拿着一个申请或者证明什么的,首先需要到A部门盖章,然后到B机构盖章,然后到C单位签字,想想如果他们的职责改变了(意味着你盖章签字的顺序要发什么改变),或者他们之间又新增了一个机构,你是不是还得了重新知道他们之间的盖章签字顺序。如果是在系统中实现这么个场景,怎么搞?顺序变的话去修改执行代码的顺序?增加机构的时候加入新机构的代码?是不是挺麻烦?是不是...原创 2018-03-20 11:02:16 · 84 阅读 · 0 评论 -
UML学习笔记
UML语言1.用例图:用于描述系统系列功能。功能用椭圆表示角色用人形符号表示角色与功能的关系用线段表示功能和功能之前的关系用带箭头的虚线表示2.类图:类图用于表示系统都包含哪些类,类之间都如何关联。类图通过三个部分的矩形来表示,最上面的是类名,中间的是属性,下面的是方法。类之间有三种基本的关系:a.关联b.泛化(和继承同一个概念)c.依赖原创 2016-12-01 19:34:13 · 156 阅读 · 0 评论 -
23种设计模式
http://blog.csdn.net/zhangerqing/article/details/8194653/点击打开链接转载 2017-05-08 14:37:23 · 143 阅读 · 0 评论 -
UML类图
深入浅出UML类图 作者:刘伟 ,发布于:2012-11-23,来源:CSDN 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Lang转载 2017-06-14 15:42:19 · 336 阅读 · 0 评论 -
设计模式——单例模式
一、定义: 顾名思义,单例单例,也就是只允许有一个实例对象。那怎么去控制只允许有一个实例对象呢?答案就是将其构造函数私有化(private),使外界不能去new这个类的对象。外界想要获取该类的对象,只能通过该类的静态方法去获取,从而达到控制只有一个实例的目的。二、单例模式的实现实现单例的方式有两种:1.懒汉模式2.饿汉模式那什么叫懒汉模式、什么叫饿汉模式呢?顾名思义,...原创 2018-03-08 16:46:26 · 108 阅读 · 0 评论 -
代理模式
一、背景 想像一下,现在我们要在系统中打印日志,该怎么办?直接能想到的简单暴力的方法就是在各个类的方法输出打印。但是你有没有想过,就算每个类每个方法都加上了,哪天系统日志显示和要求修改(增加内容,调整格式等等),怎么办?去一个一个类一个一个方法改么?这是不是听着都有点受不了?所以代理模式出现了。二、概念 代理模式就像我们找房子的中介一样,我们把房屋需求描述给他,他给我们去找...原创 2018-03-15 09:50:10 · 100 阅读 · 0 评论 -
工厂模式
一、背景 如果现在要实例化一个类 Shape,最直接了当的方法就是 Shape s = new Shape();但是如果Shape有众多子类(比如 Squre Circle ..等等)需要实例化的话 ,我们就需要 一个一个去new (Shape c = new Circle(), Shape sq = new Squre()..)这么做的话,如果某个子类的构造函数变了,比如说增加了传参,...原创 2018-03-09 16:36:33 · 229 阅读 · 0 评论 -
命令模式
一、背景 想像一下,如果一个军官要派他的A下属去炸碉堡,B下属去炸军火库,C下属去狙击敌军头目,如果要安排下属的执行步骤及具体细节,军官是不是得累死?同样,如果系统中要去执行某些操作,怎么办?直接new出对象然后执行该操作的方法?如果该操作是多个方法的组合呢?是不是好累,而且如果想要执行的操作多了,想想这个工作量~,所以命令模式出现了。二、概念 回顾我们看过的电视电影,军...原创 2018-03-16 10:19:49 · 77 阅读 · 0 评论 -
装饰者模式
一、背景 想象一下,如果现在我们要对已有的一个类扩展功能,我们会怎么做?我想第一个闪现到我们的脑袋里面的便是继承了吧,但是试想一下,如果不断地想扩展功能,继承是不是会带来好多子类,子类与父类存在耦合。如果父类改变,比如构造函数参数变化,还得到每个子类去修改。二、概念 所谓装饰者模式,顾名思义,就是包装。想小时候玩的礼物盒游戏,一层一层的包裹礼物,被包裹 的 便是我们的被装饰者,包裹...原创 2018-03-12 10:21:13 · 114 阅读 · 0 评论 -
访问者模式
一、背景 相信大家都吃过鱼,有的喜欢将其清蒸,有的喜欢将其煎炸,有的习惯将其炖煮。鱼不会应其烹饪方法而改变。同样在系统中如果要针对某一数据结构操作,如果数据结构因对其的操作而改变,想想都会觉得很麻烦,然而访问者模式正是应对这种场景。二、概念 访问者模式:表示作用于某对象结构各元素的操作,它使你在不改变各元素类的前提下定义作用于这些元素的新操作。三、代码实例/** * 被访问者...原创 2018-03-19 10:27:36 · 76 阅读 · 0 评论 -
适配器模式
一、背景 试想现在有两个接口,接口a正在被A使用,接口b正在被B使用(a不适用B,b不适用A),如果现在A要使用b怎么办?重新写一个a类型的 带有b功能的接口?这样是不是太重复,太麻烦了,所以适配器模式便产生了。二、概念 适配器模式,顾名思义,最核心的思想便是适配。就想我们的充电器 苹果充电器想要充安卓机怎么办?那还不简单,加一个转接头呗。同理,适配器模式也是如此,将一个类的...原创 2018-03-13 09:51:20 · 116 阅读 · 0 评论 -
模板方法模式
一、背景 如果现在有这么个场景,现有一个财务系统,A,B,C三对象都需要对账单进行查询,然后各自进行不同的操作。怎么整?在A,B,C中分别查到账单然后在进行各自的处理?那么查询的动作是不是重复了?所以模板方法模式出现了。二、概念 模板方法模式:定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类不可改变算法的结构即可重新定义算法的步骤。直白一点就是在抽象类中定义一个公用...原创 2018-03-23 09:46:04 · 94 阅读 · 0 评论 -
UML 类图中的关系
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现类与类图1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(...转载 2018-12-10 09:46:31 · 1050 阅读 · 0 评论