设计模式与重构
简单极致_李
这个作者很懒,什么都没留下…
展开
-
重构的最佳时机
重构代码很危险,它会给测试工作增加巨大的负担。除非你的程序需要重构,一定不要轻易重构代码。我这里所说的并不是把一个for循环改成while 循环,或把一个StringBuffer改成StringBuilder,我说的是大动作,例如重写一个方法,一个函数,甚至整个类或包。如果你缺乏对一个方法或一个类的了解,那你重构它的条件就不充分。即使你有一个天才的计划,你也需要和团队一起设计其中重大的修改。原创 2013-04-03 14:31:56 · 861 阅读 · 0 评论 -
设计模式之七:命令模式(Command Pattern)
GOF 在《设计模式》:"将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作"。命令模式 是对象行为型模式。/** * 命令模式里边一般都有以下几个角色:原创 2013-05-01 08:03:46 · 1826 阅读 · 2 评论 -
设计模式之十:策略模式(Strategy Pattern)
策略模式属于对象的对象行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:原创 2013-05-06 22:38:24 · 1203 阅读 · 0 评论 -
设计模式核心大总结
最常用的设计模式都明白后,我们如何选择设计模式?如何在相似的设计模式之间取舍?以及设计模式之间的关联关系?这些搞明白才能更好的进行设计。 接下来我将深入总结这些问题,敬请期待......原创 2013-05-08 12:29:04 · 1171 阅读 · 0 评论 -
设计模式之十一:创建模式(Builder Pattern)
GOF 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要由以下部分组成。建造者接口:给出一个接口,以规范产品对象的各个组成成分的建造,这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。具体建造者:实现了建造者接口。针对不同的商业逻辑,具体化复杂对象的各部分创建。创建完成后,提供产品的实例。指导原创 2013-05-08 12:52:17 · 1190 阅读 · 0 评论 -
设计模式之十六:模版模式
模板模式:定义一个操作中算法的骨架将一些步骤的执行延迟到其子类中。Android中的Activity、View等等都利用了模板模式。以AdapterView为例其中AdapterView通过getAdapter()、setAdapter(T adapter)、addView(View child)和onLayout()等方法将一部分具体逻辑延迟到各个子类实现。代码如下:public abstr转载 2014-12-14 13:59:40 · 572 阅读 · 0 评论 -
设计模式之六:适配器模式(Adapter Pattern)
《设计模式》GOF 说明:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式 是类对象结构模式。//目标角色, 开放给客户的接口 clientInterfacepublic interface Target { pub原创 2013-05-01 07:41:45 · 1242 阅读 · 0 评论 -
设计模式之十三:装饰器模式
装饰器模式意图:动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式相比生成子类更加灵活;动机:我们希望给某个对象添加而不是整个类添加一些功能;下面看个例子:package com.google; /* * 创建一个对象的抽象也就是接口 */ public interface Basket { public void sho原创 2013-09-20 12:15:33 · 1122 阅读 · 0 评论 -
设计模式之十四:享元模式
享元(Flyweight)模式:通过共享技术以便有效的支持大量细粒度的对象。享元模式在阎宏的《java与模式》中分为单纯享元模式和复合享元模式,复合模式的复合享元是不可以共享的,还是《Design Pattern Elements of Reusable Object-Oriented Software》的翻译版《设计模式可复用面向对象软件的基础》一书总翻译为内部对象和外部对象,相对直白。原创 2013-10-21 00:58:27 · 1023 阅读 · 0 评论 -
设计模式之十五:访问者模式(Visitor Pattern)
访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。 定义(源于GoF《Design Pattern》):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必备条件,而且这个结构对象必原创 2014-07-07 18:19:42 · 1103 阅读 · 0 评论 -
设计模式之一 :单例设计模式
单例设计模式是比较简单的,它有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例设计模式 是对象创建型模式。package cn.google.design.singleton;//单例模式最要关心的则是对象创建的次数以及何时被创建。public class Singleton {//方法一privat原创 2013-04-09 22:46:55 · 1013 阅读 · 0 评论 -
Android和MVC
Activity和Android的mvc模式 Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了,还要知道结合android的设计模式。 下面我就先来介绍一下MVC在Android开发中的应用:原创 2014-11-04 14:26:38 · 1687 阅读 · 0 评论 -
Reactor模式-反应器模式
http://daimojingdeyu.iteye.com/blog/828696http://www.jdon.com/concurrent/reactor.htm原创 2015-08-22 17:51:07 · 571 阅读 · 0 评论 -
委托模式-Delegate
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承。在这个例子里,类模拟打印机Printer拥有针式打印机RealPrinter的实例,Printer拥有的方法prin原创 2014-11-03 10:32:55 · 793 阅读 · 0 评论 -
设计模式之十二:组合模式(composite)
GoF:它的意图是将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以向处理简单元素一样来处理复杂元素。如果你想要创建层次结构,并可以在其中以相同的方式对待所有元素,那么组合模式就是最理想的选择。本章使用了一个文件系统的例子来举例说明了组合模式的用途。在这个例子中,原创 2013-06-20 07:35:26 · 1085 阅读 · 0 评论 -
IOC
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依原创 2014-11-04 18:26:37 · 765 阅读 · 0 评论 -
设计模式之四:外观模式(Facade Pattern)
《设计模式 可复用面向对象软件的基础》这本书对外观模式的描述: 意图:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用; 动机:将一个系统分成几个子系统有利于降低系统的复杂性;外观模式 是对象结构型模式。下面请看实例代码://子系统之一package com.google.fa原创 2013-04-12 15:22:46 · 1101 阅读 · 0 评论 -
设计模式之九:迭代器模式(Iterator Pattern)
GOF 在《设计模式》:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式 是对象行为模式。聚合:是指一组对象的组合结构,比如:java 中的集合,数组等。思想:迭代模式的关键思想就是把聚合对象的遍历个访问从聚合对象中分离出来,放入单独的迭代器中。功能:以不同的方式遍历聚合对象,比如向前、向后等。 对同一对象进行多原创 2013-05-02 19:33:48 · 1300 阅读 · 2 评论 -
设计模式之五:代理模式(Proxy Pattern)
(GOF)书上 代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用. 代理模式 是对象结构型模式。package com.google.design.proxy;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class原创 2013-04-19 16:57:52 · 1287 阅读 · 0 评论 -
设计模式之八:简单工厂模式(Simple Factory pattern)
GOF 在《设计模式》:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式:就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。简单工厂模式 是对象创建型模式。package cn.google.design.factory.simple;//抽象产品角色public interface Car { publi原创 2013-05-01 08:13:16 · 1928 阅读 · 0 评论 -
Android 项目架构设计分析
分享到App工程结构搭建:几种常见构分析 本文算是一篇漫谈,谈一谈关于android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构。本文先分析几个当今比较流行的android软件包,最后我们汲取其中觉得优秀的部分,搭建我们原创 2014-10-24 16:06:21 · 797 阅读 · 0 评论 -
设计模式原则之四:迪米特法则
迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP)。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道原创 2013-05-12 22:10:46 · 1027 阅读 · 0 评论 -
设计模式原则之五:里氏置换原则
里氏置换原则 定义:所有引用基类的地方必须能够透明的使用其子类对象。也就是说,只要父类出现的地方子类就能够出现,而且替换为子类不会产生任何错误或异常。但是反过来,子类出现的地方,替换为父类就可能出现问题了。这个原则是为良好的继承定义一个规范,简单的讲,有4层含义:一、子类必须完全实现父类的方法 -- 定义一个抽象类public abstract class View原创 2013-05-12 22:40:48 · 970 阅读 · 0 评论 -
设计模式原则之三:接口隔离原则
接口隔离原则要求的是在一个模块应该只依赖它需要的接口,以保证接口的小纯洁。而且需要保证接口应该尽量小,即设计接口的时候应该让接口尽量细化,不要定义太臃肿的接口(比如接口中有很多不相干的逻辑的方法声明)。首先看看接口隔离原则的定义,有两种定义第一种:Clients should not be forced to depend upon interfaces that they don't原创 2013-05-09 00:06:43 · 1380 阅读 · 0 评论 -
设计模式原则之二:开闭原则
开闭原则定义 :一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。开闭原则总结:面对需求,对程序的改动是通过增加新代码进行的,而不是改变原来的代码。我们前面提到的模板方法模式和观察者模式都是开闭原则的极好体现从到代码如下(其实就是模板模式):package com.google.desingn;原创 2013-05-08 23:24:37 · 995 阅读 · 0 评论 -
面向对象的7个设计原则
大家先总体了解,后期我用代码逐一说明。 在使用面向对象的思想进行系统设计时,前人共总结出了7条原则,它们分别是:单一职责原则、开闭原则、里氏替换原则、依赖注入原则、接口分离原则、迪米特原则和优先使用组合而不是继承原则。1.单一职责原则(SRP)单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。它的英文缩写是SRP,原创 2013-05-05 18:50:24 · 1617 阅读 · 0 评论 -
设计模式之二:观察者模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知所有的观察者;观察者模式 是对象行为模式。package cn.google.design.observed.two;import java.util.Observable;//实现被观察者public class House extends Observable{publ原创 2013-04-09 23:45:59 · 1099 阅读 · 0 评论 -
设计模式原则之六:依赖倒置原则
依赖倒置原则(简称DIP),本质就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是6个设计原则中最难以实现的了,如果没有实现这个原则,那么也就意味着开闭原则(对扩展开发,对修改关闭)也无法实现。 即1、高层模块不应该依赖低层模块,两者都应该依赖于抽象(抽象类或接口)2、抽象(抽象类或接口)不应该依赖于细节(具体实现类)原创 2013-05-12 23:09:05 · 988 阅读 · 0 评论 -
设计模式原则之一:单一职责原则
一个优良的系统设计,强调模块间保持低耦合、高内聚的关系,在面向对象设计中这条规则同样适用,所以面向对象的第一个设计原则就是:单一职责原则(SRP,Single Responsibility Principle)。 单一职责,强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则。原创 2013-05-06 11:03:30 · 1737 阅读 · 0 评论 -
设计模式之五S:动态代理模式(Dynamic Proxy Pattern)
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。抽象角色:声明真实对象和代理对象的共同接口;代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真原创 2013-04-27 16:53:33 · 1395 阅读 · 0 评论 -
设计模式之三:Bridge模式
【GOF95】在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。抽象化 存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待【LISKOV94】。实现化 抽象化给出的具体实现,就是实现化。原创 2013-04-11 13:25:28 · 1244 阅读 · 1 评论 -
设计模式之八S:抽象工厂模式(Abstract Factory Pattern)
GOF 在《设计模式》:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 1:抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模 式的用意。 2:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。 3:抽象工厂模式与工厂方法模式的原创 2013-05-02 17:41:55 · 1078 阅读 · 0 评论