摘要: 问题:在面向对象的设计中,抽象是一个很重要的概念,所谓抽象就是忽略一类对象的特殊特性,提出一些共有的特性,暂时忽略一些细节,而对与此类对象的变化可以使用继承的手段在子类中完成,换言之,用继承来应对抽象的变化。在软件系统中,当抽象由于某种原因也容易变动,使得对象从两个维度或更多方向上发生改变。使用继承方案往往违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比继承方案更好的解决方法。定义:桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化。意图:Bridge模式,系统被分为抽象(Abstraction)和实现 阅读全文
posted @ 2012-09-05 09:57 创生 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 问题:在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍历自身的接口,而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历,这不符合单一职责原则。如果将遍历算法交给客户端,会将容器的内部细节暴露无遗,而且客户端与聚集对象高度耦合。分离了集合对象的遍历行为,将遍历算法交给这个迭代器角色来完成,可以很好的避免容器内部细节的暴露,而且也使得设计符合“单一职责原则”,另外迭代器模式抽象了具体迭代器角色,可以通过对一个抽象迭代器多个集成可来完成同一聚集 阅读全文
posted @ 2012-08-15 08:48 创生 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 问题:当我们定义一系列的算法,怎么能使得算法为应对不同的业务需要能自由的动态替换而又不影响到客户端的使用,并且算法的增减、修改都不会影响环境和客户端。定义:策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换。该模式可使得算法能独立于使用它的客户而变化。意图:Strategy模式是行为模式,正因为他是一种行为模式,所以他不是用来解决类的实例化的,跟创建什么样的产品没有关系,此模式解决的问题是把一个系列完成相同工作,却实现不同的算法(行为)包装到一系列的策略类里面,使得它们可以相互替换,提供一个访问接口,由客户端决定在什么情况下使用什么具体策略,来完成某一功能。并可以自由的添加修 阅读全文
posted @ 2012-08-08 13:40 创生 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 问题:在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,并提只有一个全局访问点,才能确保它们的逻辑正确性、以及良好的效率。定义:单例模式也叫也叫单件模式是一种对象创建模式, 保证一个类仅有一个实例,并提供一个该实例全局的访问点。这个类称为单例类。意图:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例.参与者: •单例类:确保类只有一个实例,而且自行实例化并向整个系统提供这个实例。UML图:实例说明:诺基亚手机工厂诺基亚手机工厂,可以生产多款手机 阅读全文
posted @ 2012-08-07 10:15 创生 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 问题:Factory Method模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。但是,我们在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作,同时由于需求的变化,这“一系列相互依赖的对象”也要改变,如何应对这种变化呢?Abstract Factory模式是为创建一系列相关或依赖的对象提供创建接口(AbstractFactory),将一组产品的创建封装到一个用于创建对象的类(ConcreteFactory)中(形成一个系列),维护这样一个创建类总比使用Factory Method维护n多相关对象的创建过程(逻辑)要简单的多,而且Factory Method,没有办法保证“一系 阅读全文
posted @ 2012-08-06 09:26 创生 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 问题:简单工厂模式比较适用于事先已经考虑到的可能出现的算法,来构造工厂类实现,如果需要添加新的类,则就需要改变工厂类了,违反开闭原则,简单的说,简单公共适应与业务变化不是很剧烈的场景下如,审批业务,设计时可以判断到的只有“部门经理审批”,“总裁审批”不会过几天又要加入“组长审批”,去修改工厂类,相对来说变化不是很剧烈的。在软件设计中经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如果我们使用简单工厂,这样会不断地修改工厂类,应对业务变化,违反开闭原则,另外因为实例化产品的判断逻辑在工厂类中,工厂类会变的越来与臃肿。定义:工厂 阅读全文
posted @ 2012-07-31 08:42 创生 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 问题:为了满足一种业务需要需要多个算法,(如:审批业务,有部门经理审批,总监审批,总裁审批...)。因为是同一类业务处理,所以我们经常会抽象出这些算法的公共属性和方法以形成抽象基类或者接口,这样我们可以通过声明一个指向基类(或接口)的指针来指向实际的子类实现,达到了多态的目的。因为要为每一种算法在使用之前都要先创建一个实例,然后才能使用。这里就出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码 。这个实例化工作有谁来做呢,如果交给客户端去做,客户端势必要进行相应的逻辑判断,来决定调用那一算法去实例化相应的子类对 阅读全文
posted @ 2012-07-30 08:47 创生 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 我突然想写这个系列博客,主要是因为我离开博客园太久了,有点淡淡的怀念,博客园上的大好时光,让我历历在目,仿佛向我招手回去。其实,我想写EOM系列文章,结果写了11篇就没有下文;想写《从C语言实战谈编程》写了六篇也没有下文,还有《反洗钱系列文章》、《银行业信息化规划和架构》、《软件新架构NNS》、《软件设计师》等等话题,都是虎头蛇尾,自己想起来脸都红,愧对博客园、愧对网友了。不过有一点,那就是当时我的确对这些话题充满着兴趣和激情,都做了写作计划的。但是计划不如变化快,自己要做的事太多,一旦写文章拖延几次,慢慢地就越拖越懒,越拖越不想写,以至于欠的写作债越来越多。还有一个原因是我想将精力转向微博, 阅读全文
posted @ 2012-07-25 08:59 创生 阅读(139) 评论(0) 推荐(0) 编辑