随笔分类 -  设计模式

摘要:MVC,MVP 和 MVVM 的图示 复杂的软件必须有清晰合理的架构,否则无法开发和维护。MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用。 一、MVC MVC模式的意思是,软件可以分成三个部分。 视图(View):用户界面。 控制器(Controller 阅读全文
posted @ 2016-03-17 15:48 蚂蚁吃大象、 阅读(382) 评论(0) 推荐(0)
摘要:状态模式 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。它有两种使用情况: (1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。 (2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。示例 本文的例子为第一种情... 阅读全文
posted @ 2015-11-15 19:35 蚂蚁吃大象、 阅读(194) 评论(0) 推荐(0)
摘要:观察者模式 定义对象间的 一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布- 订阅(Publish-Subsrcibe)。示例 可以举个博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些... 阅读全文
posted @ 2015-11-15 19:33 蚂蚁吃大象、 阅读(229) 评论(0) 推荐(0)
摘要:职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。示例 考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权 ... 阅读全文
posted @ 2015-11-15 19:28 蚂蚁吃大象、 阅读(248) 评论(0) 推荐(0)
摘要:中介者模式 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了中间者的角色,协调各方利益。示例 本文就以租房为例子,如果没有房屋中介,那么房客要自己找房东,而... 阅读全文
posted @ 2015-11-15 19:24 蚂蚁吃大象、 阅读(295) 评论(0) 推荐(0)
摘要:备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态示例 玩游戏时都会保存进度,所保存的进度以文件的形式存在。这样下次就可以继续玩,而不用从头开始。这里的进度其实就是游戏的内部状态,而这里的文件相当于是在游戏之外保存状态... 阅读全文
posted @ 2015-11-15 19:19 蚂蚁吃大象、 阅读(452) 评论(0) 推荐(0)
摘要:装饰模式 时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一 些功能,最简单的做法就是修改接口,添加函数,然后继承类中都相应的添加实现,这样做倒也没什么问题,但是如果这种变化来个好几次或者继承类非常多,那... 阅读全文
posted @ 2015-11-15 19:01 蚂蚁吃大象、 阅读(287) 评论(0) 推荐(0)
摘要:桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化。适用性: 1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。如上面例子中手机品牌有2种变化因素,一个是品牌,一个是功能。 2.当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进... 阅读全文
posted @ 2015-11-15 18:18 蚂蚁吃大象、 阅读(383) 评论(0) 推荐(0)
摘要:享元模式 运用共享技术有效地支持大量细粒度的对象。 享元对象能做到共享的关键是区分内蕴状态(InternalState)和外蕴状态(ExternalState)。 内蕴状态是存储在享元对象内部并且不会随环境改变而改变。因此内蕴状态并可以共享。 外蕴状态是随环境改变而改变的、不可以共享的状态。... 阅读全文
posted @ 2015-11-15 18:02 蚂蚁吃大象、 阅读(259) 评论(0) 推荐(0)
摘要:代理模式 为其他对象提供一种代理以控制对这个对象的访问。 主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或 者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦... 阅读全文
posted @ 2015-11-15 17:07 蚂蚁吃大象、 阅读(264) 评论(0) 推荐(0)
摘要:组合模式 组合模式,是为了解决整体和部分的一致对待的问题而产生的,要求这个整体与部分有一致的操作或行为。部分和整体都继承与一个公共的抽象类,这样,外部使用它们时是一致的,不用管是整体还是部分,使用一个方法即可遍历整体中的所有的部分。就像一个树形结构一样。适用性: 常用于组织结构,产品结构之类的整... 阅读全文
posted @ 2015-11-08 21:39 蚂蚁吃大象、 阅读(277) 评论(0) 推荐(0)
摘要:外观模式 外观模式为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用性 1.为一个复杂子系统提供一个简单接口。 2.提高子系统的独立性。 3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。代码示例 假设编译一个程... 阅读全文
posted @ 2015-11-08 20:42 蚂蚁吃大象、 阅读(261) 评论(0) 推荐(0)
摘要:原型(Prototype)模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对... 阅读全文
posted @ 2015-11-04 21:06 蚂蚁吃大象、 阅读(228) 评论(0) 推荐(0)
摘要:适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国的电压是220V,要在中国能使用,必须找个变压器转一下电压才可以。这个变压器就是个适配器。 适配器模... 阅读全文
posted @ 2015-11-01 12:51 蚂蚁吃大象、 阅读(301) 评论(0) 推荐(0)
摘要:建造者(Builder)模式 建造者(Builder)模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式包含一个抽象的Builder类,还有它的若干子类——ConcreteBuilder,关键是看指挥官Director,Director里面的方法Const... 阅读全文
posted @ 2015-10-31 21:48 蚂蚁吃大象、 阅读(281) 评论(0) 推荐(0)
摘要:策略模式 策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。用策略模式来封装算法,效果比较好。优点: 1、 简化了单元测试,因为每个算法都有自己的类,可以通... 阅读全文
posted @ 2015-10-31 13:04 蚂蚁吃大象、 阅读(304) 评论(0) 推荐(0)
摘要:单例模式 单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。单... 阅读全文
posted @ 2015-10-26 17:53 蚂蚁吃大象、 阅读(332) 评论(0) 推荐(0)
摘要:工厂模式 工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。适用性: 例如部署多种数据库的情况,可能在不同的地方要使用不同的数据库,此时只需要在配置文件中设定数据库的类型,每次再根据类型生成实例,这样,不管下 面的数据库类型怎么变化,在客户端看来都是只有一个Ab... 阅读全文
posted @ 2015-10-26 16:47 蚂蚁吃大象、 阅读(343) 评论(0) 推荐(0)