java设计模式
文章平均质量分 83
宇不语
个人网站: www.ittianyu.com
Github: github.com/ittianyu
QQ: 86839868
找安卓开发工作ing
展开
-
写给新人的面向对象的基本思维
个人接触编程的时间也5年了,全职写代码的时间差不多也有近3年了,但这段时间走了很多弯路,一是因为身边没有经验丰富的开发者,二是很少接触程序设计方法论方面的知识。导致我看文档写代码能力是提高了,但设计能力一直不强,对工程的管理也不擅长,对面向对象的理解也不深入。最近在补设计方法方面的知识,写下这篇笔记,既方便以后复习,也是为新手答疑解惑。 1.面向对象和面向过程的区别先说一下我对面向对象原创 2016-07-12 09:31:11 · 7218 阅读 · 6 评论 -
设计模式之合成模式
1 什么是合成模式 合成模式属于对象的结构模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 这定义看着太抽象了,我们举个栗子。在二维图形中,线、圆、矩形等都可以看作是图形,而通过简单图形组合起来的图形也可以看作图形。 2 如何实现合成模式 合成模式可分为安全式和透明式。 简单说来就原创 2016-07-31 19:10:26 · 683 阅读 · 0 评论 -
设计模式之装饰模式
1 什么是装饰模式 装饰模式又名包装模式。装饰模式对客户端透明方式扩展对象的功能,是继承关系的一个替代方案。 通俗来说,就是包装一个对象,让其拥有更强的功能。 2 如何实现装饰模式 同样我们举个简单的例子。 * 现需要一个发票打印程序 * 一张发票可以分成三个部分:头部、主体、尾部 * 要求打印的发票格式如下: * * *** XX原创 2016-08-04 19:16:50 · 406 阅读 · 0 评论 -
设计模式之状态模式
1 什么是状态模式状态模式允许一个对象在其内部状态改变时改变其行为。从外界看起来就像类改变了一样。通俗说来,就是内部状态不同,行为不同。 比如,作为人来说,高兴状态和难过状态,做同一件事的效果可能不一样。 2 如何实现状态模式首先还是以一个问题作为入口。 * 现有一个机器人,他有三种状态:高兴、平静、难过 * 他有say和work方法 * 高兴的时候会原创 2016-08-04 19:21:37 · 462 阅读 · 0 评论 -
设计模式之建造模式
1 什么是建造模式 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 2 如何实现建造模式 先从一个小问题入手。 * 假设电脑由主板、CPU、内存、硬盘和显卡组成 * 为了组装一台电脑,我们需要先装主板,然后装CPU、内存、硬盘、显卡 * 请你设计几个类来描述这一创原创 2016-08-01 22:01:57 · 633 阅读 · 0 评论 -
设计模式之模版方法模式
1 什么是模版方法模式 模版方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。 2 如何实现模版方法模式我们以一个简单的问题入手。 * 写代码累的时候,总想喝点什么,可能咖啡、可乐、原创 2016-08-01 22:05:55 · 303 阅读 · 0 评论 -
设计模式之调停者模式
1 什么是调停者模式 调停者模式包装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以松散的耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证了这些相互作用可以彼此独立地变化。 简单来说就是许多对象之间关系错综复杂,如果让这些对象直接联系的话,复杂度和耦合度很高。这时候专门设立一个调停者,让所有对象只喝调原创 2016-08-02 18:53:50 · 795 阅读 · 0 评论 -
设计模式之享元模式
1 什么是享元模式 享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内蕴状态外蕴状态。内蕴状态是存储在享元对象内部的,不会随着环境而改变,所以是可以共享的。外蕴状态是随环境改变而改变的,所以不可共享。 2 如何实现享元模式 同样我们举个简单的例子。 * 加载图片是非常消耗资源的操作 *原创 2016-08-02 18:58:54 · 386 阅读 · 0 评论 -
设计模式之原始模型模式
1 什么是原始模型模式 原始模型模式属于对象的构建模式。通过给出一个原型对象来指明所要创建的对象的类型,然后复制这个原型对象的办法创建出更多同类型的对象。 通俗来说,就是通过存在的对象创建出n份相同的对象,也就是对象拷贝。而java对这模式有很好的支持,有克隆接口。 2 如何实现原始模型模式 对于对象拷贝来说,存在两种,一种是浅拷贝,一种是深拷贝。两者唯一原创 2016-08-03 12:16:25 · 933 阅读 · 0 评论 -
设计模式之责任链模式
1 什么是责任链 责任链模式是一种对象的行为模式。在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。 举个简单的原创 2016-08-03 12:22:00 · 586 阅读 · 0 评论 -
设计模式之观察者模式
1 什么是观察者模式 观察者模式是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。 这个定义也有些抽象,简单来说,就是类似于订阅报纸系统,每当报社有新闻时,就会给订阅的用户推送。 2 如何实现观察者模式同样以一个简单的问题作为入口。原创 2016-07-31 19:07:00 · 325 阅读 · 0 评论 -
设计模式之访问者模式
1 什么是访问者模式 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这种操作需要修改的话,接受这个操作的数据结构则可以保持不变。 2 如何实现访问者模式同样以一个简单的问题入手。 * 某公司有很多员工,作为老总,你可能会想知道一些他们的信息,比如每个人的月薪、年假时间、日工作时长等 很明显这个问题中数据结构相原创 2016-07-30 22:35:31 · 303 阅读 · 0 评论 -
设计模式之不变模式
1 什么是不变模式 一个对象的状态在对象被创建后就不再变化,这就是不变模式。 2 如何实现不变模式不变模式可分为强不变模式和弱不变模式,区别就是弱不变模式中,其子类对象的状态可以变化。 不变模式很简单。 只要达成以下条件,就可以认为是强不变模式。 * 不变类中没有方法修改对象的状态。 * 不变类中所有属性都为私有。 * 不变类中引用的其他对象原创 2016-07-30 22:33:39 · 472 阅读 · 0 评论 -
设计模式之工厂模式
1 简单工厂简单工厂又称静态工厂模式,通常可以理解为通过一个类的静态方法来产生具体的类。举个简单的栗子。现有三种水果:苹果、葡萄和草莓。需要一个类来负责生产这些水果。 这时,即使没学过简单工厂模式的人也很容想到,设计一个类,里面有一个静态方法,通过调用该方法,传入不同的名字,来产生不同的对象。 为此我们先抽象出一个水果类Fruit package com.i原创 2016-07-23 10:28:15 · 338 阅读 · 0 评论 -
代码重构的原则
代码重构追求的原则是将行为尽量移动到结构的高端,而将状态尽量移动到结构的低端。1995年,Auer曾在文献[AUER95]中指出:(1) 应当根据行为而不是状态定义一个类。也就是说,一个类的实现首先建立在行为的基础之上,使用间接的引用而不是直接的引用。换言之,应当使用取值方法而不是直接引用属性。(2) 在实现行为时,是用抽象状态而不是具体状态。如果一个行为涉及到对象的状态时,使用间接引转载 2016-07-26 14:21:23 · 594 阅读 · 0 评论 -
设计模式之适配器模式
1 什么是适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 这很好理解。假如你在美国买了一款电器回中国,这时候是不能直接插上插座就用的,因为美国的生活电压是110V,而中国的是220V,这时候需要一个220V转110V的适配器来转换电压。 同样的,在代码中,如果一个接口和目标接口不一致,但只能用目标接口时,就需要用到适配器。 2 怎么实现适配器模式为了便于理解,还是以一个简单的问题为入口。原创 2016-07-28 18:45:50 · 345 阅读 · 0 评论 -
设计模式之桥接模式
1 什么是桥接模式将抽象化与实现化脱耦,使得两者可以独立的演化。举个简单的例子。物品从感性上划分可分为可爱的、冷酷的、热情的等,从性质上划分可分为各类物品,比如:花、草、树、鸟等。这样就出现了排列组合的问题,花可以有可爱的、冷酷的、热情的,同样其他性质的物品也是。如果给每个这样的组合都做一个类,工作量就太大了。这时就需要引入桥接模式。2 桥接的实现桥接的主要原理是把两个维度上的扩展分开,也就是解耦合。同样先引入一个简单的小问题。 * 空中巴士(Airbus)、波音(Boeing)原创 2016-07-27 10:11:42 · 413 阅读 · 0 评论 -
设计模式之命令模式
1 什么是命令模式命令模式是把一个请求或操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录到请求日志,可以提供命令的撤销和恢复功能。 简单来说,把原来一个代码片段命令封装成一个命令对象,然后可以被客户按情况使用。 2 如何实现命令模式同样还是以一个简单的问题作为入口。 * 假设电视机有三种操作:开机、关机、换台 * 通过遥控器可以发出这三种命令 * 要求通过Command模式实现原创 2016-07-26 12:54:11 · 568 阅读 · 0 评论 -
设计模式之门面模式
1 什么是门面模式门面模式是对象的结构模式。外部与一个子系统的通信必须通过一个统一的门面对象进行,这就是门面模式。通俗来说,就是一个系统内部很复杂,但这个系统有一个很简单的对外按钮,只需要按下按钮,这个系统就能工作了,这个按钮就是我们所说的门面。2 如何实现门面模式同样以一个简单的例子作为入口。 * 现有一个保安系统,由两个录像机、三个灯泡、一个遥感器和一个报警器组成。 * 保安系统的操作人员需要经常的启动和关闭这些设备。对于这个保安系统,里面东西相对较多,而操作人员如果每天都要挨个原创 2016-07-25 10:49:44 · 572 阅读 · 0 评论 -
设计模式之单例模式
1 什么是单例模式作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。2 怎么实现单例模式现在假设有这样一个问题: * 现在小明家只有一辆汽车和一辆自行车,而大家都可以获取来使用。面对这样一个问题,我们就需要保证系统中最多产生一辆汽车和一辆自行车。首先,要封闭构造方法,这样外部就不能通过new的方法来产生新的对象。然后就是对外提供一个获取实例的方法。具体实现起来有两种的模式,即饿汉模式和懒汉模式。饿汉模式是程序运行原创 2016-07-24 10:09:56 · 370 阅读 · 0 评论 -
设计模式之策略模式
1 什么是策略模式?策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。生活中有很多需要策略模式的例子,举个比较简单的。某购物网站,需要针对某些书进行打折促销,但不同书的打折策略不一定相同。对教材类的书每本减免10元,对连环画采用每本优惠%7,其他图书没有优惠。这时候我们需要对不同的对象采用不同的策略。2 怎么用策略模式?我们以一个问题入手。 * 现有一个超市,针对原创 2016-07-19 23:00:52 · 638 阅读 · 0 评论 -
设计模式之备忘录模式
1 什么是备忘录模式 备忘录模式又叫做快照模式或Token模式,是对象的行为模式。备忘录对象是一个用来存储另一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 2 如何实现备忘录模式同样为了容易理解,我们以一个简单问题为入口。 * 假设你正在开发原创 2016-07-29 20:17:02 · 336 阅读 · 0 评论 -
设计模式之代理模式
1 什么是代理模式代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。2 怎么实现代理模式首先我们要知道代理模式按使用目的可分为以下几种: * 远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。 * 虚拟代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。 * 保护代理:控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。智能引用代理:当一个对象被引用时,提供一些额外的操作,比如将此对原创 2016-07-20 20:40:29 · 454 阅读 · 0 评论