摘要:
设计模式的六大原则 设计模式的六大原则 创建型模式 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 结构型模式 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口 阅读全文
posted @ 2016-06-27 18:29
_Doing
阅读(189)
评论(0)
推荐(0)
摘要:
原型模式 何时使用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。在运行期建立和删除原型。用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数 阅读全文
posted @ 2016-06-27 18:28
_Doing
阅读(215)
评论(0)
推荐(0)
摘要:
工厂模式 何时使用:我们明确地计划不同条件下创建不同实例时。主要解决接口选择的问题。 如何解决:定义一个工厂接口,让工厂类实现工厂接口。让调用者自己通过参数传递决定实例化创建哪一个工厂类,返回的是一个抽象的工厂产品实例。 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用 阅读全文
posted @ 2016-06-27 18:28
_Doing
阅读(314)
评论(0)
推荐(0)
摘要:
建造者模式 何时使用:对每个对象:将一个复杂的构建过程与其具表示细节相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的 阅读全文
posted @ 2016-06-27 18:27
_Doing
阅读(210)
评论(0)
推荐(0)
摘要:
何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。主要解决:将一个类的接口转换成客户希望的另外一 阅读全文
posted @ 2016-06-27 18:27
_Doing
阅读(132)
评论(0)
推荐(0)
摘要:
组合模式(Composite Pattern) 何时使用:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 1、您想表示对象的部分-整体层次结构(树形结构 阅读全文
posted @ 2016-06-27 18:27
_Doing
阅读(290)
评论(0)
推荐(0)
摘要:
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern) 允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。可以组合多个标准来获得单一的标准。 例子: 一组对象List实例 -> 一个标准模式Criteria -> 过滤对象:XXXCr 阅读全文
posted @ 2016-06-27 18:26
_Doing
阅读(108)
评论(0)
推荐(0)
摘要:
何时使用:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的高层接口,使得这一子系统更加容易使用。为子系统中的一组接口提供一个一致的界面。可以向现有的系统添加一个接口,来隐藏系统的复杂性。1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。 如何 阅读全文
posted @ 2016-06-27 18:26
_Doing
阅读(146)
评论(0)
推荐(0)
摘要:
何时使用:保持接口,增强性能。为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀,在不想增加很多子类的情况下扩展类,动态地给一个对象添加一些额外的职责,可以使用装饰器模式。特点:不改变原类文件、不使用继承、动态扩展。 如何解决:将具体功能职责划分,同时 阅读全文
posted @ 2016-06-27 18:25
_Doing
阅读(208)
评论(0)
推荐(0)
摘要:
享元模式 何时使用: 1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。 5、系统不依赖于这些对象身份,这些对象是不可分辨的。主要解决:在有大量对象时,有 阅读全文
posted @ 2016-06-27 18:25
_Doing
阅读(152)
评论(0)
推荐(0)
摘要:
何时使用:系统可能有多个角度分类,每一种角度都可能变化。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。 如何解决:需要一个作为桥接的接口/抽象类,多个角度的实现类依赖注入到抽象类,使它们在抽象层建立一个关联关系,能把这种多角度分类的实现类分离出来,让它们独立变化,减少它们之间耦 阅读全文
posted @ 2016-06-27 18:24
_Doing
阅读(381)
评论(0)
推荐(0)
摘要:
代理模式 何时使用:想在访问一个类时做一些控制。为其他对象提供一种代理以控制对这个对象的访问。 关键代码:增加中间层(代理层),代理类与底层实现类实现共同接口,并创建底层实现类对象(底层实现类对象依赖注入代理类),以便向外界提供功能接口。 优点: 1、职责清晰。 2、高扩展性。 3、智能化。 缺点: 阅读全文
posted @ 2016-06-27 18:23
_Doing
阅读(120)
评论(0)
推荐(0)
摘要:
责任链模式 何时使用:在处理消息的时候以过滤很多道。避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接 阅读全文
posted @ 2016-06-27 18:23
_Doing
阅读(1067)
评论(0)
推荐(0)
摘要:
解释器模式 何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。这种模式被用在 SQL 阅读全文
posted @ 2016-06-27 18:23
_Doing
阅读(109)
评论(0)
推荐(0)
摘要:
命令模式 何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,应将"行为请求者"与"行为实现者"解耦。 如何解决:调用者依赖命令,命令依赖接收者(即:接收者依赖注入到命令,特定的接收处理者与相对应的命令绑定;命令依赖注入到接收者) 阅读全文
posted @ 2016-06-27 18:22
_Doing
阅读(249)
评论(0)
推荐(0)
摘要:
迭代器模式 Java 和 .Net 编程环境中非常常用的设计模式。用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 何时使用:用于遍历一个聚合对象,提供一种方法顺序遍历访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。: 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需 阅读全文
posted @ 2016-06-27 18:22
_Doing
阅读(186)
评论(0)
推荐(0)
摘要:
中介者模式 何时使用:多个类相互耦合,形成了网状结构。对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。中介者模式可以处理不同类之间的通信,支持松耦合,用来降低多个对象和类之间的通信复杂性使代码易于维护: 阅读全文
posted @ 2016-06-27 18:22
_Doing
阅读(127)
评论(0)
推荐(0)
摘要:
备忘录模式 何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 如何解决:通过 阅读全文
posted @ 2016-06-27 18:21
_Doing
阅读(136)
评论(0)
推荐(0)
摘要:
状态模式 何时使用:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 如何解决:创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象,对象的行为依赖于它的状态,并且可以根据它的状态改变而改变它的相关行为(可通过调用内部的状态对象实现相应的具体行为)。( 阅读全文
posted @ 2016-06-27 18:21
_Doing
阅读(270)
评论(0)
推荐(0)
摘要:
观察者模式 何时使用:对象间的一种一对多的依赖关系,当一个对象(观察目标对象)的状态发生改变,所有依赖于它的对象(观察者对象)都将得到通知,使这些观察者对象能够自动更新(即使用推送方式)。 如何解决:在观察目标类里有一个 ArrayList 存放观察者们。 优点: 1、观察者和被观察者是抽象耦合的。 阅读全文
posted @ 2016-06-27 18:20
_Doing
阅读(266)
评论(0)
推荐(0)
摘要:
空对象模式 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。使用一个空对象取代 NULL 对象实例的检查,空对象不是检查空值,而是反应一个不做任何动作的关系。这样的空对象也可以在数据不可用 阅读全文
posted @ 2016-06-27 18:20
_Doing
阅读(275)
评论(0)
推荐(0)
摘要:
策略模式 何时使用:一个类的行为或其算法可以在运行时更改。在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。 如何解决:创建表示各种策略的对象(它们实现同一个接口,可相互替换)和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行 阅读全文
posted @ 2016-06-27 18:19
_Doing
阅读(172)
评论(0)
推荐(0)

浙公网安备 33010602011771号