摘要: 2010-09-20 作者:云飞龙行 来源:云飞龙行的blog来写一个大家既陌生又熟悉的设计模式,也是非常实用的一个设计模式,那就是桥接模式。说陌生是很多朋友并不熟悉这个设计模式,说熟悉是很多人经常见到或者是下意识的用到这个设计模式,只是不知道罢了。桥接模式是非常实用的一个模式,下面就来写写它。 桥接模式(Bridge)1 场景问题1.1 发送提示消息考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是 阅读全文
posted @ 2011-11-28 16:50 Flying Dreams 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 学习设计模式也有一段时间了,今天就把我整理的一篇课程和大家分享,有不妥之处欢迎指出.生活中的一个例子: 就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化?怎样实现才能应对这种变化呢?概述:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图: 将抽象部.. 阅读全文
posted @ 2011-11-28 16:43 Flying Dreams 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 一. 从树谈起 基本上所有人都知道树这个概念。稍微深究.NET本质的人会懂得,.NET有个对象树。学习ASP.NET的人肯定会知道,Web上有个控件树。哪怕是只学习过数据结构应付考试的大学生也会知道Tree这个概念。二. 把需求扩展成树 举个我们最常用的Photoshop做例子。在Photoshop中,有许多图形工具,比如星星,比如方形,再比如圆形等等。在Photoshop中,不用多说,也有很多种颜色供我们选择。于是就产生了,红色的星星,绿色的星星。红色的方形,绿色的方形等等。看看所产生的树:现在是三种图形,三种颜色,于是我们就一共去声明了九个类,当然我们还不算中间过程中的辅助父类。如果我们现 阅读全文
posted @ 2011-11-28 16:31 Flying Dreams 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 本文为大家介绍软件设计中的一些原则,都是经过长期经验总结出来的知识,每一个程序员都应该了解,相信对大家在进行软件设计的过程中会有很大帮助。 Don’t Repeat Yourself (DRY) DRY 是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让他们以一些合适的参数调用这个新的方法。 参考:http://en.wikipedia.org/wiki/KISS_pr 阅读全文
posted @ 2011-11-28 15:54 Flying Dreams 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 1、定义:原型模式就是通过一个原型对象来表明要创建的对象类型,然后用复制这个对象的方法来创建更痛类型的对象。2、原理:有两部分组成,抽象原型和具体原型。3、使用时机:系统需要 创建吃的对象是动态加载的,而且产品具有一定层次时,可以考虑使用原型模式。1>当要实例化的类是在运行时刻指定时,例如,通过动态装载;2>或者为了避免创建一个与产品类层次平行的工厂类层次时;3>或者当一个类的实例只能有几个不同状态组合中的一种时。4>建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。4、效果:1>可以再运行时刻增加和删除产品。2>可以通过改变值来指 阅读全文
posted @ 2011-11-28 15:50 Flying Dreams 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 有的时候,我们需要一个实例时,并且,当创建一个实例的过程比较复杂或者说是昂贵时,比如,创建实例的构造函数非常的复杂,在执行这个构造函数时会消耗较长的时间,同时呢,这个构造函数中的一些信息又没有什么变化(也就是说创建第一个实例时初始化信息是这样的,创建第二个实例时初始化信息还是还是这样的),那么直接使用 new 来创建这样一个实例就显得太昂贵了,最好的解决方法,并不是使用 new 来实例化一个对象,而是使用克隆,也就是复制,克隆呢,就是通过复制现在已经有了的实例来创建新的实例,这样有什么好处呢?很明显,这样实现呢,客户端根本就不知道具体要实例化的是哪一个类,它只知道是复制了,但具体的实例化情况, 阅读全文
posted @ 2011-11-28 15:49 Flying Dreams 阅读(174) 评论(0) 推荐(0) 编辑
摘要: Template Method 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现. 它是一个骨架,在框架的设计中多用此设计模式. 对模板方法进行挂钩: 钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现.钩子的存在, 可以让子灰有能力对算法的不同点进行挂钩.要不要挂钩,由子类自行决定. 好莱坞原则: 高层组件对低层组件的方式是"别调用我们,我们会调用你". Java代码 publicabstractclassCaffeineBeverage{//不希望子类覆盖此方法,声明为finalfinalvoidprepareRecipe(){boilWater 阅读全文
posted @ 2011-11-28 15:18 Flying Dreams 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 1、概念理解 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。2、例子 tea、coffee制作例子Coffee 具体步骤如下 煮开水,煮咖啡,倒咖啡,加牛奶,加糖Tea 具体步骤如下:煮开水,泡茶,倒茶,加柠檬(1):首先是abstract模版类Java代码 publicabstractclassCaffeineBeverage{//模版方法,定义成final是不希望子类覆盖该方法finalvoidprepareRecipe(){boilWater();//把水煮沸brew();//调制pourInCup(); 阅读全文
posted @ 2011-11-28 15:17 Flying Dreams 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 声明:转载抽象工厂是创建一系列的产品供客户代码使用,而生成器模式是生成多个产品后组合成一个产品供客户代码使用。生成器模式可以精确控制产品如何组合。因此在使用产品系列时,采用抽象工厂模式;而在需将将一系列产品组合成一个产品时,使用生成器模式2.Builder与Abstract Factory的区别:刚开始的时候,我也觉得Builder和Abstract Factory差不多,深入了解后才发觉,它们之间也是有区别的,虽然它们都是生成新对象给使用者,也可以创建复杂对象,不过Abstract Factory是立即生成新的对象,有实时性,而Builder则有可能需要多种条件都符合的时候才能生成新的对象. 阅读全文
posted @ 2011-11-28 14:31 Flying Dreams 阅读(1065) 评论(0) 推荐(0) 编辑
摘要: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://tianli.blog.51cto.com/190322/34089生成器模式属于对象结构型模式,其意图是将一个复杂对象的构建与他的表示分离,使得同样的构建创建过程可以创建不同的表示。适用性:1. 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时2. 当构造过程必须允许被构造的对象有不同的表示时。参与者: 生成器Builder:为创建一个Product对象的各个部件指定抽象接口(AnimalBuilder)。 具体生成器ConcreteBuilder:实现Bu 阅读全文
posted @ 2011-11-28 14:17 Flying Dreams 阅读(405) 评论(0) 推荐(0) 编辑