设计模式
文章平均质量分 65
鼎鼎浩
num
展开
-
最通俗易懂--设计模式之七大原则
我写的这一系列设计模式,可能会围绕Java+Android来举例,但是不影响阅读。设计模式是什么? 设计模式是广大程序员长年累月的经验总结。这门课也不是太容易,我尽量理解,也尽量说的简洁并通俗易懂,共同学习。 设计模式有什么用? 优化你的代码,让代码可读性强,适用性高,软件体系更加灵活。 回看一下自己的代码有没有一种牵一发而动全身的害怕,稍微更改一点就要崩溃,设计模式就是来解决这些问题原创 2017-03-09 20:52:45 · 1714 阅读 · 1 评论 -
责任链模式--一级一级觅佳音,总有一款适合你(行为模式01)
什么是责任链模式 使多个对象都有机会处理请求。 这个行为模式的关键就是在链的使用,寓意就是对象的链式调用,我解决不了的问题交给下一个对象处理,一级一级的调用,直到找到能解决的对象为止。责任链模式的适用场景 多对象处理同一请求,但具体处理的对象动态决定。 请求处理对象不明确,轮询处理。责任链模式中的角色Handler:抽象处理角色–抽象声明处理方法,并引用下一节点ConcreateHand原创 2017-05-04 18:16:27 · 694 阅读 · 0 评论 -
命令模式--把需求记录在案,让事务灵活可变(行为模式02)
什么是命令模式 将单个请求封装成单个对象,客户端可调用不同请求完成任务。对请求有所记录,或可支持撤销等操作。命令模式的适用场景 需要支持事务操作。 需要有类似于日志记录的功能,可在执行之前做修改操作,或意外丢失可执行恢复工作。 抽象出需要执行的动作,以参数的形式提供给命令者。命令模式的角色 Receiver:接收者角色。执行具体逻辑的角色。 Command:命令角色,定义总的命令抽象接口原创 2017-05-04 23:26:41 · 683 阅读 · 0 评论 -
策略模式--条条大路通罗马(行为模式07)
什么是策略模式 策略模式定义了一系列封装好的算法,使他们可以相互替换。 策略模式让算法独立于使用他的客户端独立变化。策略模式的适用场景 同一种问题有多重处理方式,仅仅在具体实现有差别 需要安全的封装同一类型的操作 实现同一抽象有多个子类,而又需要适用分支操作选择具体子类时策略模式用例 我们从出发地到目的地可以选择坐公交车,也可以选择打的,公交车比较便宜实惠,打的比较贵但是快且舒适,选择哪原创 2017-06-05 00:16:42 · 456 阅读 · 0 评论 -
迭代器模式--更高、更快、更强(行为模式09)
什么是迭代器模式 提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。 迭代器模式又称为游标模式,迭代器模式是一个元老级别的设计模式,针对容器的访问,我们java中要设计遍历算法,迭代器算是客户端与系统之间的第三者,方便遍历应运而生。迭代器模式的适用场景 遍历容器内对象迭代器模式用例 好比我们高校Java专业有两个班级JavaOne和JavaTwo,辅导员想要获取所原创 2017-06-17 00:45:12 · 435 阅读 · 0 评论 -
备忘录模式--玩到尽兴须保存,下次开机继续玩(行为模式05)
什么是备忘录模式 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存该状态,以后可用来恢复对象保存的状态。备忘录模式就像我们对于现阶段所做的备份,以后如果用得到就可以根据这个备份进行操作。比如windows系统的系统恢复点的创建,如我我们害怕系统突然的崩溃掉,就可以创建一个恢复点,万一系统真的崩溃了,我们就根据这个恢复点来进行系统恢复。备忘录模式适用场景需要保存某个对象某个时刻的原创 2017-05-22 00:30:25 · 437 阅读 · 0 评论 -
模板方法模式--封装相似,简而用之(行为模式10)
什么是模板方法模式 定义一个操作中的算法框架,将一些步骤引用到子类中,从而实现不改变算法结构重定向该算法的特定内容 模板方法主要针对问题解决的流程相同但是具体解决方法不同,比如我从学校乘车到火车站,流程肯定是出校门、选择交通工具、上车、下车等,而具体的选择坐公交、坐地铁、打车、坐飞机都是不确定的。模板方法模式的适用场景 多个子类有共有方法,并且逻辑基本相同 重要复杂的算法可以吧核心算法设计为原创 2017-06-17 22:55:13 · 412 阅读 · 0 评论 -
观察者模式--众多通知,一步到位(行为模式06)
什么是观察者模式 定义对象间一种一对多的依赖关系,使得每当一个对象改变时,所有依赖于他的对象都会得到通知并被自动更新。 观察者模式在实际应用中非常的广泛,他的重要作用就是把观察者和被观察者解耦,使得彼此依赖更小。好比我们android开发中给listview设定的Adapter,如果我们改变数据并通知Adapter,则我们listview的所有目标item数据内容就会相应改变。观察者模式的适用场原创 2017-05-22 19:53:40 · 464 阅读 · 0 评论 -
原型模式--深浅拷贝要明知(创建型模式06)
什么是原型模式 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新对象。 原型模式有一个样板实例,然后通过拷贝对象的形式来生成新对象,这个在jdk中有个克隆对象,从而避免new对象。原型模式的适用场景 类初始化需要很多资源,通过拷贝避免这些资源引用的资源消耗。 new对象繁琐,或需要很多数据准备或权限审批。 一个对象需要作为模板功其他多个对象访问并对其修改时,可拷贝原对象来实现一对一修原创 2017-06-21 00:38:22 · 356 阅读 · 0 评论 -
访问者模式--要风得风,要雨得雨(行为模式11)
什么是访问者模式 封装一些作用于某种数据结构中各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 这是最后一个模式了,不知不觉也快要结束了。访问者模式也是这23种模式中最为晦涩的一个了,还好使用频率并不是很高。访问者模式的适用场景 对象结构稳定,需要频繁在此对象基础上定义新操作 需要对对象内的数据操作,并不希望操作时对原对象有所影响访问者模式用例 说一个关于我们这原创 2017-06-23 00:53:48 · 405 阅读 · 0 评论 -
23种设计模式总结
前言设计模式属于系统架构,是程序员长期以来的经验总结,不是一门技术性语言。设计模式的作用就是让你的代码系统解耦合,可最大力度的提高系统灵活扩展性。当然用设计模式和不用设计模式也许都可以实现代码预期目的,但如果想要你的系统易于维护,考虑长远的发展的话,这种经验就不可或缺。不会偷懒的程序员不是好程序员,时间是很宝贵的。分类(基本按照使用频率顺序排列,个性特点简语已归纳,如需详细了解请点击连接)设计模式原创 2017-06-23 14:24:47 · 486 阅读 · 0 评论 -
状态模式--随遇而安(行为模式08)
什么是状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了他的类。 状态模式中的行为是由状态来决定的,不同状态下有不同的行为,状态模式和策略模式的结构几乎完全一样,但他们的目的、本质却完全不同。状态模式的行为是平行不可替换的,策略模式的行为是相互独立可以替换的。状态模式的适用场景 对象的行为取决于他的状态并随之改变行为。状态模式用例 电视机和遥控器的关系,开机状态下我原创 2017-06-15 13:42:14 · 369 阅读 · 0 评论 -
中介者模式--万能和事佬(行为模式04)
什么是中介者模式 中介者模式包装了一系列对象相互作用的方式,使得这些对象不必明显作用,从而使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他对象之间的作用。保证这些作用可以独立变化。中介者模式适用场景 对象之间交互操作过多且每个操作依赖彼此,防止修改一个对象行为影响全局。中介者模式的角色 Mediator:抽象中介者角色 ConcreteNediator:具体中介者角色原创 2017-05-11 01:33:41 · 430 阅读 · 0 评论 -
解释器模式--自定义语言翻译机(行为模式03)
什么是行为模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 文法和解释器是编译原理课程中的术语,这里我们说的通俗一点,以例子来说明。语法好比我们编写Java中的class{}类,然而计算机并不识别,我们想要让他识别就需要安装jdk来做解释,jvm就相比是解释器。从而让我们写的代码可以运行在计算机上。行为模式的适用场景如果一个简单语言需要通过翻原创 2017-05-10 23:36:04 · 606 阅读 · 0 评论 -
装饰模式--动态添加装饰物(结构型模式03)
什么是装饰模式? 动态地给一个对象添加一些额外的职责。 装饰模式也称为包装模式,本着对客户端透明的方式来动态扩展对象的功能。相比增加功能来说他比继承生成子类更加灵活,使用更加简便。装饰模式适用场景 需要透明地动态扩展类的功能(比如奶油蛋糕本体是奶油蛋糕,扩展需要加水果或者花朵装饰物,而装饰物的品类是动态添加种类也不固定的)装饰模式用例 人是被装饰的本体,性别分为男女等。装饰类有上衣、裤子、裙原创 2017-04-12 11:27:25 · 616 阅读 · 0 评论 -
适配器模式--我是万能胶(创建型模式05)
什么是适配器模式? 使原本因接口不匹配而无法融合的两个类或对象可以融合。 适配器,我们在日常开发中很常见,基本上看到Adapter字符都是使用了适配器模式,他就像第三方的转接,A和B认识,B和C认识,A想认识C的话,常规思维是不是通过B来介绍?这里B就充当了适配器的角色。适配器模式适用场景 输入无法预知,输出要求一致; 系统要使用一个不认识的类,通过适配器来转接他认识的类。(接口不兼容)接下原创 2017-03-28 23:30:07 · 846 阅读 · 0 评论 -
Builder模式--合理分工,自由扩展(创建型模式04)
什么是Builder模式 将一个“复杂对象的构建算法”与它的“部件及组装方式”分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。Builder模式是一步一步来创建复杂对象的过程。该模式将复杂对象的构建过程和他的组成解耦来实现隔离。 比如我们要造一辆东风汽车,他的实现需要轮胎、引擎、方向盘、车门……等等很多部件,使用Bui原创 2017-03-22 11:50:10 · 669 阅读 · 0 评论 -
工厂方法模式--应用最广(创建型模式02)
什么是工厂方法模式? 定义一个用于创建对象的接口,让子类决定实例化哪个类。 在任何需要生成复杂对象的地方,都可以使用工厂方法模式。用new就可以完成的创建无需要使用工厂方法模式。工厂方法四大模块:抽象工厂角色(AbstractFactory)具体工厂角色(ConcreteFactory)抽象产品角色(AbstractProduct)具体产品角色(ConcreteProduct)这个和下原创 2017-03-16 17:02:45 · 611 阅读 · 0 评论 -
抽象工厂方法模式--不确定产品设计(创建型模式03)
注意: 抽象工厂模式 和 工厂方法模式不要混肴了,抽象工厂模式扩展性更强,工厂方法模式更具体一些。什么是抽象工厂模式? 为指定的对象提供接口,而不指定他们的具体类。 抽象工厂模式,意在抽象这个词上边,抽象工厂说明这个工厂出来的东西是不具体的。 举个例子:抽象工厂模式源于以前针对不同操作系统的图形化解决方案,如Android和os中控件TextView、Button等控件,虽然都有这个对象,原创 2017-03-15 13:00:15 · 741 阅读 · 0 评论 -
单例模式--单对象创建(创建型模式01)
无论我们以哪种方式实现单例模式,原理都是将构造函数私有化,通过静态方法获取唯一实例,再考虑线程安全和资源利用率等情况。具体取用哪一种,取决于项目本身,综合情况选择最佳的方式。原创 2017-03-10 15:26:38 · 880 阅读 · 0 评论 -
桥接模式--让路更好走(结构型模式01)
什么事桥接模式? 将抽象部分与实现部分分离,使得各自变化独立自主。 现实中我们常见的桥主要作用是连接两地,这个两地就是抽象和实现两个地方,通过桥接把他们连接起来,而各自的发展不受影响。桥接模式适用场景 想使你的代码更加灵活,易于扩展; 一个类存在两个以上的独立变化,而且这些变化需要自行扩展。桥接模式中的角色Abstraction(抽象部分)Refined Abstraction(抽象的具原创 2017-03-29 23:21:21 · 764 阅读 · 0 评论 -
组合模式--统一区别,同样对待(结构型模式02)
什么是组合模式 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象以及组合对象的适用具有一致性。 组合模式又称为部分整体模式,他主要是根据一个树状结构来确定要归纳为同一类的对象,从而以同样的方法去访问对象和对象组合,忽略掉他们之间的差别。比如根文件下有文件和子文件夹,子文件夹下还会有文件和子文件夹……这个如果我们要写一个类来层次描述他们,岂不是要写很多很多。使用组合模式就是把原创 2017-04-05 20:36:22 · 638 阅读 · 0 评论 -
外观模式--高层调用,删繁就简(结构型模式04)
什么是外观模式? 外观模式也叫门面模式(Facaed Pattern)。 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。从而提供一个统一的高层接口,使得子系统更易于应用。其实外观模式是最常用到的,比如我们Android中有Toast.makeText(MainActivity.this, “Hello,World!”, Toast.LENGTH_SHORT).show();我们原创 2017-04-15 14:43:15 · 661 阅读 · 0 评论 -
代理模式--你说我来做,反射帮大忙(结构型模式06)
什么是代理模式 为对象提供一种代理以控制这个对象的访问。 代理模式(Proxy Pattern)也称为委托模式。地位举足轻重,也比较简单。就像他的名字一样,代理是他的精华所在,我们生活中各种各样的代理服务,比如快递实质上也是帮你去卖家那里取东西。平时吃饭不想动,让室友帮你带一份(无偿劳动力-_-!),代理就是委托中间人帮你办一件事,毕竟大家都在瞎忙….代理模式的适用场景 当无法或直接访问某个对原创 2017-04-20 15:50:42 · 652 阅读 · 0 评论 -
享元模式--拒绝多对象,优化第一步(结构型模式05)
什么是享元模式? 使用共享对象可有效地支持大量的细粒度对象。 享元模式(FlyWeight pattern)是对象池的一种实现,代表轻量级的思想。适合用在大量重复对象的创建,从而实现内存的优化,提升性能。比如我们要设计个游戏,里边要创建成千上万的士兵角色,我们也许会做一千次new soldier(),但是这样的话对于内存来说会有不必要的消耗,享元模式就很好的解决了这个问题。 享元模式中可共享不原创 2017-04-20 13:42:49 · 504 阅读 · 0 评论 -
Android框架中的MVC、MVP、MVVM设计思想
框架和设计模式的异同 框架并非设计模式,框架中包含有设计模式,对框架而言是对相同行为代码的重用,而设计模式是对相同结构代码的重用。框架适用于系统模块开发,而设计模式适用于功能模块开发。框架是大智慧,对系统软件设计进行分工,明确各自职能; 设计模式是小技巧,对具体问题提出应对策略,提高代码复用率,降低系统耦合。框架的适用性 并不是开发一个系统就需要使用框架,框架所做的事是把模块分离开发,让专业原创 2017-07-27 13:45:38 · 931 阅读 · 0 评论