代码改变世界

随笔分类 -  设计模式

策略模式(Strategy)

2011-10-20 11:42 by javaspring, 299 阅读, 收藏,
摘要: 一、概要我们构建程序的时候,会遇到这样的状况,对象有某个行为,但是在不同的场景中,使用策略模式,可以把它们一个个封装起来,并且使它们可相互替换,而起使得算法可独立于使用它的客户而变化。二、生活举例对于一个商店来讲,对不同的客户要报不同的价格,比如:(1)对普通客户或者是新客户报的是全价(2)对老客户(会员)报的价格,要给予一定的折扣(3)对大客户(批发)报的价格,根据大客户购买量,给予一定的折扣(4)根据不同的时间段,例如工作日和节假日等,可能价格仍然不同。处理复杂的报价功能,就会用到策略模式。三、实现思路四、类图五、注意点1、策略模式的设计原则即把一个类中经常改变或者将来可能改变的部分提取出 阅读全文

观察者模式(Observer)

2011-10-10 14:36 by javaspring, 168 阅读, 收藏,
摘要: 一、概述对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。GOF 《设计模式》这样的依赖关系过于紧密,软件不能很好地适应变化。使用面向对象技术,我们可以将这种依赖关系弱化,即降低耦合。二、生活举例1、我们每个人都有银行卡,通常会有一项业务,余额变更通知。这个便很好地体现了观察者模式。监控银行卡内余额的变化,当我们取钱,转账等原因导致余额变化时,系统会自动采用多种方式告知我们余额情况,可以是短信通知,可以是Email通知,也可以寄账单等等。2、报社、订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送或者邮寄 阅读全文

也谈分层

2011-09-30 10:05 by javaspring, 215 阅读, 收藏,
摘要: 最近在网上看了很多关于架构的文章,比较流行的是三层架构。我也来凑个热闹,跟着扯一扯分层。我们从大处往小处说,先说,什么是架构?架构是一系列相关的抽象模式,用于指导大型软件系统各方面的设计。它描述一个软件系统从整体到部分的最高层次的抽象划分。直接认为架构就是系统草图也不为过。根据我们关注的角度不同,架构大概有三种:1、逻辑架构,主要描述软件系统中元件之间的关系,例如用户界面,数据库,业务逻辑元件等等2、物理架构,主要描述软件元件是如何安装到硬件上的。3、系统架构,主要描述系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。可以看到,系统架构师必须具备软件和硬件两方面的过硬能力,还得有 阅读全文

抽象工厂模式(Abstract Factory)

2011-09-29 21:38 by javaspring, 335 阅读, 收藏,
摘要: 一、概要 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式提供一种“封装机制”用来解决“多系列具体对象”的创建工作,降低客户端和“创建工作”的紧耦合度。二、生活中的例子 例如一个汽车工厂(抽象工厂),拥有四个下属汽车工厂(具体工厂),分别是生产轿车,越野车,客车,每个工厂都要有生产各自类型汽车配件的车间(方法)。 考虑到开闭原则,增加新车型工厂容易,增加新型配件不容易。图示:三、实现思路 当有多个抽象产品,且每个抽象产品都有多于一个的具体子类的时候,而抽象工厂角色又提供多个具体的工厂角色,分别对应多个具体的产品角 阅读全文

工厂方法模式(Factory Method)

2011-09-25 07:45 by javaspring, 222 阅读, 收藏,
摘要: 一、概要 工厂方法(FactoryMethod)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。二、生活中的例子 例如移动电信运营商,不同的话费套餐形式,如动感地带,神州行,全球通等。我们可以把抽象工厂(套餐工厂)做成一个接口,这个接口只有一个方法,就是创建抽象产品(计费类)的工厂方法。然后所有的要生产具体类(动感地带,神州行等)的工厂去实现这个接口,由具体的套餐工厂去创建具体的套餐类。于是我们再增加新的套餐的时候,就不需要更改原有的工厂类,只需要增加此功能的计费类和相应的工厂类就可以了。图示:三、实现思路 工厂方法模式是对简单工厂模式进行了抽象。有一个抽象的Fact 阅读全文

单例模式(Singleton)

2011-09-18 15:13 by javaspring, 200 阅读, 收藏,
摘要: 一、概要 单例模式,提倡简约而不简单,透漏一种简捷美。它保证一个类仅有一个实例,并提供一个访问它的全局访问点。要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。二、生活中的例子 1、在中国,一个男人只能有一个合法妻子 2、世界上只能有一个中国 3、windows只能有一个任务管理器 等等三、实现思路 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的... 阅读全文