design pattern
aixieyaxiong
这个作者很懒,什么都没留下…
展开
-
抽象类还是接口?
从概念上看 抽象类要描述的是一种类型,和普通的实现类一样描述着的现实世界的事物,不同的是普通的实现类描述着一种具体的事物,如三角形,圆形。而抽象类描述的是一种抽象的事物,如形状,动物等。 接口要描述的更多的是一种形为,如现实世界的事物所具体的功能和特点。实现类可以实现多个接口而具有多个功能和特点。 一种事物可能具体多种形为、功能,但是只属于一种类型。...原创 2012-07-10 11:29:23 · 77 阅读 · 0 评论 -
design pattern——状态模式
针对问题:有时候一个方法可能有很多if..else来判断状态后再执行相关操作,当很多方法都重复的出现这样的if..else判断时,就可以考虑用状态模式了。 状态模式的结构图和策略模式一样,事实上状态模式和策略很相似,不同的是状态模式除了委托状态外,状态实体自身持有主实体对象的引用,在状态实体内部可以动态的改变主实体的状态。 状态模式结构图: ...原创 2012-07-25 17:48:10 · 143 阅读 · 0 评论 -
design pattern——组合模式
针对问题:组合模式使我们在处理树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 组合模式结构图: 组合模式实现代码: /** * 为树叶或树枝抽象一个接口 * @author bruce * */public...原创 2012-07-24 11:16:55 · 102 阅读 · 0 评论 -
design pattern——迭代器模式
针对问题:提供统一接口访问集合,屏蔽集合内部数据的访问和数据结构。提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。 迭代器模式的结构图: 迭代器模式的实现代码: /** * 迭代接口 * @author bruce * */public interface Iterator ...原创 2012-07-23 17:50:13 · 82 阅读 · 0 评论 -
design pattern——模板方法模式
针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以将这些类抽象出一个继承结构,将重复的部分放在父类中来实现复用,而不同的地方由子类提供实现,和工厂方法模式类似。并且由子类提供实现这些思想可以大量用于类似回调的功能,例如java api 集合的排序功能。 模板方法模式 定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中...原创 2012-07-23 16:25:06 · 89 阅读 · 0 评论 -
design pattern——外观模式
针对问题:在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。 那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦? 为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。——Gang of Four ...原创 2012-07-20 15:11:53 · 75 阅读 · 0 评论 -
design pattern——适配器模式
针对问题:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four 适配器模式结构图: 适配器模式实现代码: /** * 现实存在的接口 * @author bruce * */public interface Adaptee...2012-07-20 14:30:12 · 91 阅读 · 0 评论 -
design pattern——命令模式
针对问题:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式。在命令模式上可以看到观察者模块和代理模块的影子,事实上就是两者的结合。 ...原创 2012-07-19 17:03:04 · 105 阅读 · 0 评论 -
design pattern——单例模式
单例是乎没什么好说的,创建的过程中需要考虑到的是并发安全问题和性能优化。 实现代码: /** * 用“双重检查加锁”,在getInstance()中减少使用同步 * @author bruce * */public class Singleton { private volatile static Singleton uniqueIns...原创 2012-07-13 17:34:41 · 139 阅读 · 0 评论 -
design pattern——抽象工厂模式
针对问题:和工厂方法模式类似,用一个继承体系来实现创建对象的多变性。不同的是,抽象工厂模式针对的是产品族(许多个产品). 抽象工厂模式结构图: 抽象工厂模式实现代码:/** * 产品A接口 * @author bruce * */public abstract class ProductA ...原创 2012-07-13 17:31:20 · 81 阅读 · 0 评论 -
design pattern——工厂方法模式
针对问题:当要创建的产品种类很多,并且会随着时间的推移会不断改变时。可以将这些变化的部分抽离出来作为一个继承结构,运用多态的动态性来替换本来的改变。 工厂方法模式结构图: 工厂方法实现代码:/** * 产品接口 * @author bruce * */public abstr...原创 2012-07-13 17:25:49 · 95 阅读 · 0 评论 -
design pattern——装饰者模式
针对问题:在两个集合中的对象期望做到任意组合,而这样的组合的可能性是太多了,在实现起来无疑会导致类爆炸。所以必须有一种方法在运行时动态的创建出我期望的类型,有这样的一种解决方案可以做到:让两个集合的对象(装饰者、被装饰者)实现同一接口,也就是说让装饰者、被装饰者属于同一类型,并且在装饰者中组合这一接口,这样装饰者就可以组合(装饰)任意的被装饰者,更重要的是装饰完成之后的类型又可以作为被装饰者来被装...原创 2012-07-12 13:40:14 · 101 阅读 · 0 评论 -
design pattern——观察者模式
针对问题:在消息-通知 的程序结构中,为了通知待通知的对象,需在消息服务中持有所有的待通知的对象,消息服务和大量的待通知对象紧密的耦合在一起,无论是新添加一个通知对象、或是取消通知都必须改变消息服务。为了解决这个问题,消息服务(主题)必须提供注册和删除的接口,不仅如此,主题要想统一管理待通知的对象(观察者),所有观察者必须遵循某一规范,也就是在所有观察者中抽象出一个接口,主题无须打理观察者...原创 2012-07-11 17:59:00 · 89 阅读 · 0 评论 -
design pattern——策略模式
针对问题:在许多继承体系结构中,经常出现的一些问题是在超类中的一些接口只需在部分子类中存在。或者是超类中的接口在子类中的实现算法大同小异,就那么几种方式,这样的话每当添加一个子类就不得不在已存在某个子类中复制粘贴,没有达到复用的目的。 策略模式的结构: 策略模式的java实现: /** * 抽象类(将那些用继承不能解决...原创 2012-07-10 15:16:07 · 89 阅读 · 0 评论 -
design pattern——代理模式
针对问题: 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式和装饰模式很相似,不同之处在于代理模式是给主题添加控制,但是这些控制来自代理自身的实现,不像装饰模式一样添加的功能来自己主题的子类提供。 装饰模式可以装饰很多次来得到自己想要的实体,类似的代理模式也可以代理很多次,但通常不会这种做,因为这不是...原创 2012-07-25 17:57:29 · 86 阅读 · 0 评论