
设计模式
文章平均质量分 63
冫水冫东流星
这个作者很懒,什么都没留下…
展开
-
策略模式(行为型)
&emspo; 从北京到上海,可以坐高铁,可以坐绿皮,可以自己开车,也有个别人可能选择步行的方式。总之就是有很多种方式可以供我们选择,选择的方式不同,过程不同,但结果都是一样的,都可以从北京到上海,只要选择适合的就可以了,高铁贵但快,绿皮便宜但慢,自己开车累但方便。 在开发中也经常碰到这种情况,例如要对一个数组进行排序,可选择不同的方法.....原创 2017-01-07 13:45:56 · 311 阅读 · 0 评论 -
解释器模式(行为型)
大家都知道,写好的代码放到无法直接运行,必须要经过编译后才能运行。java代码需要编译成class(java字节码)文件才能放在jvm上运行,java代码只有经过javac编译器编译后jvm才能认识。javac编译器在这里扮演的就是解释器的角色。xml解析器也是同样的道理,还有tomcat解析war包运行web项目,android中PackageManager解析apk安装app等等,都运用了解释器...原创 2017-01-10 21:00:36 · 269 阅读 · 0 评论 -
组合模式(结构型)
在电脑磁盘里有文件和文件夹,文件夹里又可以放文件和文件夹,这个磁盘可以看做是一个树状结构,磁盘里的文件可以看做叶子,文件夹看做枝干。文件夹其实也是文件的一种形式,对它们可以进行相同的操作(复制、粘贴、删除)。 再来说说Android中的View和ViewGroup,ViewGroup是继承于View,因此ViewGroup和View可以同等看待。不同的是ViewGroup是一个容器,里面可以放....原创 2017-01-12 00:27:56 · 363 阅读 · 0 评论 -
备忘录模式(行为型)
有许多人喜欢玩单机游戏,单击游戏都有一个存档功能,把当前的所有状态保存下来,下次打开游戏只要读取这个存档信息就可以还原到上次玩的地方。还有一个我们在文本编辑时最常使用的快捷键Ctrl+Z,撤销本次操作,返回到上一个状态。这所体现的就是备忘录模式。定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态结构...原创 2017-01-14 22:35:51 · 283 阅读 · 0 评论 -
享元模式(结构型)
在软件系统中,经常会出现资源浪费的情况,例如在计算机内存中同时存在多个完全相同的或者非常相似的对象,当这些对象的数量很多,会占用很多的内存,并且重复的创建和销毁,使得GC任务繁重,内存占用居高不下,这使得系统运行代价过高。为了解决这个问题,可以将已经创建的对象的缓存起来,当下一次要再要创建新对象时,先判断缓存池中是否已经存在该对象了,如果存在就直接拿出来用,如果不存在,就新实例化一个对象——享元模式....原创 2017-01-15 23:29:59 · 318 阅读 · 0 评论 -
访问者模式(行为型)
在实际开发中也会遇到这种情况,有一个属性类E,有abcd四个属性,另外有四个类ABCD,要去访问类E,A只访问属性a,B只访问属性b,C只访问属性c,D只访问属性d。这时候访问者模式就派上用场了。定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。结构:抽象访问者:声明对每一个元素访问的行为方法,方法个数与元素个数一样...原创 2017-01-14 23:53:42 · 333 阅读 · 0 评论 -
外观模式(结构型)
外观模式在我们身边是最常见的了。就拿手机来说,手机中有各种模块,相机,gps,通信,音视频等等,这些全部集成到手机上,只要在手机上点点屏幕就可以轻松使用这些功能。还有各种第三方SDK,这些SDK往往会提供一个统一的接口供我们调用,让开发者很轻松的就可以将SDK集成到自己的系统中。定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行;提供一个高层次的接口,使得子系统更易于使用...原创 2017-01-20 11:17:26 · 235 阅读 · 0 评论 -
装饰模式(结构型)
定义:动态地给一个对象添加一些额外的职责,是继承关系的一个替代方案结构:抽象组件:被装饰的原始对象抽象,接口或者抽象类具体组件:组件的具体实现,是装饰的具体对象抽象装饰者:装饰组件对象,内部有一个指向组件对象的引用,通常为抽象类具体装饰着:装饰着具体实现适用场景:需要透明且动态扩展类的功能时...原创 2017-01-22 17:24:16 · 275 阅读 · 0 评论 -
桥接模式(结构型)
定义:将抽象部分与实现部分分离,使他们都可以独立的进行变化结构:抽象部分:抽象类,保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现优化抽象部分:抽象部分的具体实现,对抽象部分的方法进行完善和扩展实现部分:接口或者抽象类,由实现部分提供基本的操作,抽象部分的定义基于实现部分这些基本操作的业务方法具体实现部分:完善实现部分中方法定义的具体逻辑适用场景:需要跨越多个平原创 2017-01-23 13:41:20 · 336 阅读 · 0 评论 -
适配器模式(结构型)
定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作结构:目标角色:期待得到的接口源角色:需要适配的接口适配器角色:把源接口转换成目标接口适用场景:需要一个统一的输出接口,而输入端的类型不可预知系统需要使用现有的类,而此类的接口不符合系统的需要(接口不兼容)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的原创 2017-01-23 15:38:46 · 253 阅读 · 0 评论 -
代理模式(结构型)
快递员:王先生您好,这里有您你的快递,麻烦来签收一下。 隔壁老王:我现在有事情走不开,你把快递放在小区物业那里,让他们代收一下。 快递员:好的。 上面的场景就是代理模式原创 2017-01-13 00:30:50 · 215 阅读 · 0 评论 -
六大设计原则
面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源代码的复用,另一方面要确保系统能够易于扩展和修改。在程序开发中,适当的运用设计模式可以开发一个易于维护和扩展的系统。当然,关键还是在于封装。原创 2017-01-10 00:48:36 · 218 阅读 · 0 评论 -
状态模式(行为型)
在很多种情况下,一个对象的行为取决于一个或多个动态变化的属性,这些属性称为状态。例如水,液态时可以流动,气态时可以扩散,结冰时成了固态,这时既不能流动也不能扩散。例如使用键盘输入字符,当Caps Lock开启时,处于大写状态,这时输入的是大写字母,当Caps Lock关闭时,输入的是小写字母。例如用手机打电话,有信号并且话费充足时,才可以打电话,当没信号或者是处于欠费状态,就无法打电话了。原创 2017-01-03 14:39:01 · 262 阅读 · 0 评论 -
单例模式(创建型)
单例模式的主要作用是保证在java程序中,某个类只有一个实例存在,许多时候整个系统只需要拥有一个的全局对象,这样有利于协调系统整体的行为。 一些管理器和控制器常被设计成单例模式,例如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象在通过这个单例对象获取这些配置信息;再比如android中的关于SystemSetti原创 2016-12-25 23:46:07 · 520 阅读 · 0 评论 -
工厂模式(创建型)
创建一个对象常常需要复杂的过程,不适合包含在一个复合对象中。创建对象可能导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级别的抽象,还可能并不是复合对象概念的一部分。工厂方法模式通过定义一个单独的创建对象的方法来解决这些问题。由子类实现这个方法来创建具体类型的对象。原创 2016-12-26 18:15:26 · 211 阅读 · 0 评论 -
原型模式(创建型)
在我们的实际开发中,常常会碰到这种情况要对一个对象进行处理,又不能改变它原来的属性,这里我就把它称为保护现场。 例如凶手用枪杀了一个人,为了保持枪上指纹原有的样子,这把就密封包装起来,不能其他人用手去碰了,现在要进行指纹鉴定了,最好的方法就是copy一把一模一样的枪用来进行鉴定,因为可能有些鉴定手段会对枪上原有的指纹造成无法复原破坏,那现实的鉴定方法肯定是最大限度保持原有指纹不变。原创 2016-12-27 17:38:21 · 288 阅读 · 0 评论 -
观察者模式(行为型)
在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。举个例子,要设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单;再举一个现实生活中的例子,你的一个朋友存了你的手机号码,有一天你把号码换了,你是不是要把换号码的消息通知你的朋友,并且把新号码也告诉他。原创 2016-12-29 18:06:15 · 270 阅读 · 0 评论 -
责任链模式(行为型)
首先我们来看一个例子,在一个人员众多大公司里,为了方便人员管理,自然形成了金字塔结构的管理层级,最上层是老板,最底层为苦逼的码农,中间则是各个等级的管理层,并且无法跨层管理,也就是你只能与上级或者下级进行沟通,每个管理层的权限都是不一样的,逐级向上递增;现在一个员工要请半个月的假,组长最多能批3天假,于是这个申请由组长递交到项目经理,项目经理只能批5天内的假,项目经理就把这个申请递交到部门经理,部门...原创 2016-12-30 11:30:09 · 311 阅读 · 0 评论 -
模板方法模式(行为型)
我们去坐火车,有几个固定的步骤:买票->检票进站->上车->找到座位坐下。买票的方式有很多种,网上订票,电话订票,或者代售点买票,自助售票机买,通过黄牛买票等等,买的高铁,动车,还是普快,买的是站票还不能坐。 再来一个例子,去吃饭:点单->吃->买单。点单和买单都是大同小异,那吃什么就大不同,面,饺子,饭等等。原创 2016-12-30 18:30:23 · 237 阅读 · 0 评论 -
迭代器模式(行为型)
在java中容器有List、数组、Set、Map等等。这四种容器内部的组织方式都不一样,List是列表形式,Set是集合形式,Map是键值对形式。现在要去遍历一个容器里的内容,首先要了解内容在容器中的组织形式;在jdk中已经实现了List、Set、Map的迭代器,迭代器后,就不用去了解内容的组织形式了,直接用迭代器的 hasnext()和next()完成遍历。原创 2017-01-07 21:59:48 · 262 阅读 · 0 评论 -
中介者模式(行为型)
中介这个词在我们听的不要太多了,印象最深刻的莫过于房产中介了,你看见一个穿着西装打着领带的人迈着疾快的步伐向你走来,别担心,他只是想问问你买不买房。 在使用手机远距离通话时,手机也可以看做是中介:一个人在哈尔滨,一个人在三亚,他们要交流靠喊是不可能的,只有通过手机来进行,在哈尔滨的把要说的话告诉手机,手机通过无线传输将信息传到在三亚的手机上,在三亚的人就可以听到在哈尔滨的说的话了...原创 2017-01-23 16:25:55 · 298 阅读 · 0 评论