设计模式
文章平均质量分 96
BballChen
这个作者很懒,什么都没留下…
展开
-
设计模式(一):策略模式
设计模式(一):策略模式一.设计背景 现实生活中,我们要做一件事情或者完成某项工作,往往有很多种途径。比如我们出游,可以选择坐汽车,坐火车,土豪点的选择是坐飞机。还有我们现在线下的支付方式也有了很多种选择,以前在外面忘了带钱的话可能一瓶水都难以买到,现在只要我们手机在身上,可以用微信或者支付宝。 在软件设计层面,我们把各种支付方式叫做策略。如果不考虑设计模式的话,我们可能会在一......原创 2016-07-07 22:56:00 · 319 阅读 · 0 评论 -
设计模式(四):工厂方法模式(解析设计原则)
设计模式(四):工厂方法模式(解析设计原则)一、概述 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。二、解决问题 通常我们需要一个对象的时候,会想到使用new来创建对象 Tea tea = new MilkTea(); //使用了接口,代码更有弹性,体现设计原则“对接口编程,而不是对实现编程” 当我...原创 2016-07-27 00:10:00 · 671 阅读 · 0 评论 -
设计模式(五):抽象工厂方法(多个工厂方法的组合)
设计模式(五):抽象工厂方法(多个工厂方法的组合)一、概述 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。可以理解成是多个工厂方法的组合。二、解决问题 在工厂方法模式中,我们的具体创建者每次使用都只能创建一个同类型的对象,假如我们现在需要的是多个不同类型的对象,工厂方法就满足不了需求了。这时我们可以把多个工厂方法组合到一个类,这就是抽象工厂模式...原创 2016-07-31 13:12:00 · 854 阅读 · 0 评论 -
设计模式(六):单例模式
设计模式(六):单例模式一、概述 单例模式确保一个类只有一个实例,并提供一个安全的访问点。二、解决问题 从概述中我们知道,单例模式就是保证系统的一个类只有一个实例。它的作用就是控制受限资源的访问,确保任何时刻都只有一个线程在访问一个受保护的资源。或者确保行为和状态的一致性,避免异常行为。在java web的程序中可能用到最多单例的地方就是jdbc的线程池。三、结构类图 ...原创 2016-08-01 22:21:00 · 302 阅读 · 0 评论 -
设计模式(七):命令模式
设计模式(七):命令模式一、概述 命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。二、解决问题 假设我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。那么问题来了,这些智能家电来自不同的厂家,我们是不是要对每个厂家的家电都安装一个app呢?毫无疑问,我们肯定不想安装...原创 2016-08-05 14:44:00 · 204 阅读 · 0 评论 -
设计模式(八):适配器模式
设计模式(八):适配器模式一、概述 适配器模式将一个类的接口,转换为客户期望的另一个接口。适配器让原本不兼容的类可以合作无间二、解决问题 从模式的定义中,我们看到适配器模式就是用来转换接口,解决不兼容问题的。想想我们现实生活中的适配器,最常用的就是手机充电器了,也叫做电源适配器,它把家用交流强电转换为手机用的直流弱电。其中交流电就是被适配者,充电器是适配器,手机是用电客户。...原创 2016-08-07 15:49:00 · 207 阅读 · 0 评论 -
设计模式(九):外观模式
设计模式(九):外观模式一、概述 外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。二、解决问题 在上一讲中,我们学习了适配器模式,它是用来转换一个接口的,而外观模式可以理解为转换一群接口,客户只要调用一个接口,而不用调用多个接口就可以达到目的。想想现实生活中例子,我们在pc上安装软件的时候经常有默认安装或者是一键安装选项(省...原创 2016-08-07 22:20:00 · 239 阅读 · 0 评论 -
设计模式(十):模板方法模式
设计模式(十):模板方法模式一、概述 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。二、结构类图 三、解决问题 模板方法就是提供一个算法框架,框架里面的步骤有些是父类已经定好的,有些需要子类自己实现。相当于要去办一件事情,行动的流程已经定好了,但有些步骤需要自己去做,...原创 2016-08-14 18:49:00 · 254 阅读 · 0 评论 -
设计模式(十一):迭代器模式
设计模式(十一):迭代器模式一、概述 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。二、解决问题 迭代器模式就是提供一种遍历元素的统一接口,用一致的方法遍历聚合元素。试想,如果我们的聚合元素是用不同的方式实现的,有些用了数组,有些用了java的集合类,或者还有其他方式,当客户端要遍历这些元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构...原创 2016-11-15 23:27:00 · 221 阅读 · 0 评论 -
设计模式(十二):组合模式
设计模式(十二):组合模式一、概述 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及组合对象。二、解决问题 组合模式解决这样的问题,当我们的要处理的对象可以生成一颗树形结构,而我们要对树上的节点和叶子进行操作时,它能够提供一致的方式,而不用考虑它是节点还是叶子。三、结构类图四、应用实例 上一讲中,我们是...原创 2017-01-14 12:04:00 · 229 阅读 · 0 评论 -
设计模式(十三):状态模式
设计模式(十三):状态模式一、概述 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它自己的类二、解决问题 它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。三、结构类图四、应用实例 现在很多APP都有抽奖活动,我们在这里就用这个大家熟悉的例子来讲解状态模式。假如每参加一次这个活动...原创 2017-01-15 16:49:00 · 174 阅读 · 0 评论 -
设计模式(十四):代理模式
设计模式(十四):代理模式一、概述 代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。其实就是代理就是做到类似转发的功能,针对不同代理,转发的具体实现不同。二、解决问题 从原理知道他就是控制客户对一个对象的访问,它跟现实中的中介代理类似,只是作为代表做一些受理工作,真正执行的并不是它自己。比如买火车票,外面有很多火车票代理点,我们直接去代理点买票就好而不用跑到火车...原创 2017-02-05 22:21:00 · 218 阅读 · 0 评论 -
设计模式(十五):原型模式
设计模式(十五):原型模式 早就发现java父类有个方法clone(),但一直没用过,也不知道怎么用。直到学习了原型设计模式才明白,他就是克隆方法,专门用来复制对象的。虽然到目前为止还没真正在项目中用到,但克隆方法还是挺有用的,它为我们创建相同对象带来了很大的便利,只要克隆一下就可以拥有一个全新的、初始值跟父类一样的对象。一、概述 原型模式(Prototype),用原型实例指定创建...原创 2017-02-20 22:02:00 · 154 阅读 · 0 评论 -
设计模式(十六):建造者模式
设计模式(十六):建造者模式一、概述 建造者模式很容易让人想到建房子,不管建刚需房、改善房还是别墅,它们都离不开地基、柱子、层面和墙体这些组成部分,建筑工人就是把这些组成部分一个个建起来,最后连成一体建出一栋栋楼房。来看看建造者模式的定义,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建房子的过程都是相似的,但可以建出形形色色的房子。二、结构类图...原创 2017-02-22 22:47:00 · 407 阅读 · 0 评论 -
设计模式(十七):备忘录模式
设计模式(十七):备忘录模式一、概述 现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存...原创 2017-02-25 18:23:00 · 266 阅读 · 0 评论 -
设计模式(二):观察者模式
设计模式(二):观察者模式一、概述 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。观察者模式有时成为发布/订阅模式,就是让多个对象在一个对象的状态改变时被通知到。二、解决问题 当一个系统有多个类协同工作,如果在一个类中需要知道另外一个类的实现细节才能让系统运转,就会导致系统耦合过紧,以后相互依赖的类改变了或者新增了依...原创 2016-07-17 22:25:00 · 278 阅读 · 0 评论 -
设计模式(三):装饰器模式
设计模式(三):装饰器模式一、概述 装饰器模式动态地将责任附加到对象上。想要扩展功能,装饰者提供了有别于继承的另一种选择。简单描述就是包装对象,让对象提供新的行为。二、解决问题 当一个类想要获得一个行为,我们会想到面向对象四大特性之一的继承,继承能够让子类从父类中获得行为,实现很好的代码复用。但这种继承而来的行为是在编译时静态决定的,而且所有的子类都会继承相同的行为。如果我们想...原创 2016-07-20 22:33:00 · 313 阅读 · 0 评论