摘要:
命令模式(the command pattern)在本章,我们把封装带到一个全新的境界:把方法调用method invocation封装起来。没错,通过封装方法调用,我们可以把运算块包装成型。所以调用此运算的对象不需要关心事情是如何进行的,只要知道如何使用包装成形的方法来完成它就可以。通过封装方法调用,也可以做一些很聪明的事情,如记录日志,或者重复使用这些封装来实现撤销(undo)。我们有了 一个任务,weather-o-rama公司要我们设计一个遥控程序,遥控器具有7个可编程的插槽(每个可以指定到一个不同的家电装置),每个插槽都有相应的关开按钮,这个遥控器还具备一个整体的撤销按钮。还有一组j 阅读全文
随笔分类 - Design Pattern & SA
工厂模式factory pattern
2012-09-12 09:45 by youxin, 280 阅读, 收藏, 编辑
摘要:
烘烤oo的精华我们已经学了3个章节了,还没回答关于new的问题,我们不应该针对实现编程,但是当我们每次使用new时,不正是在针对实现编程吗?当看到”new“时,就会想到”具体“是的,当使用new时,你的确是在实例化一个具体类,所以用的确实是实现,而不是接口。这是一个好问题,你已经知道了代码绑着具体类会使代码更脆弱。更缺乏弹性。Duck duck=new MallardDuck();要使用接口让代码具有弹性 ,new 具体类 但是还是得建立具体类的实例。当有一群相关的具体类时,通常会写出这样的代码:Duck duck;if(picnic){ duck=new MallardDuck()... 阅读全文
设计模式之装饰者模式
2012-09-10 13:35 by youxin, 411 阅读, 收藏, 编辑
摘要:
装饰者模式 我曾经以为男子汗应该用继承处理一切。后来领教到运行时扩展,远比编译时期的继承威力大。 本章我称为“给爱用继承的人一个全新的设计眼界”。欢迎来到星巴克咖啡starbuck原先的订单系统如下:购买咖啡时,可以要求加入各种调料,,starbuck会根据所加入的调料收取不同的费用,所以,starbuck订单系统必须考虑这个问题。这是他们原先的设计:这简直就是“类爆炸”。class explosion。利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。笨透了,干嘛设计这么多类,利用实例变 阅读全文
观察者模式1(observer)
2012-07-19 16:54 by youxin, 335 阅读, 收藏, 编辑
摘要:
我们接受了一个任务,负责建立weather-o-Rama公司的下一代气象站,该气象站必须建立在该公司专利申请中的WeatherData对象上,由WeatherData对象负责跟踪目前的天气状况(温度,湿度,气压),该公司希望我们能建立一个应用,有3中布告板,分别显示目前状况,气象统计及简单的预报。由WeatherObject对象获得最新的测量数据,3中布告板必须随时更新。 WeatherData对象知道如何跟物理气象站取得联系,以取得最新的数据,WeatherData对象会随即更新3个布告板的显示。 我们收到了该公司发给我们的WeatherData源文件,看了下代码,一切很直接:需要说明的是. 阅读全文
观察者模式2(observer)
2012-07-14 19:27 by youxin, 406 阅读, 收藏, 编辑
摘要:
public interface Subject{ public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers(); //当主题状态改变时,这个方法被调用,以通知所有观察者。 }public interface Observer{ public void update(float temp,float humidity,float pressure);} //所有的观察者必须实现update方法,以实现观察... 阅读全文
策略模式
2012-07-13 17:02 by youxin, 329 阅读, 收藏, 编辑
摘要:
先从模拟鸭子游戏说起,游戏中会出现各种鸭子,一边游泳,一边瓜瓜叫,由此设计了一个superclass,并让各种鸭子继承此超类。现在要增加会飞的鸭子,如果在Duck类增加了fly(),则出现问题,不是所有鸭子都会飞。当然,你可以再不会飞的鸭子中把fly覆盖掉,并且方法体为空。但是以后你每加不会飞的鸭子,都必须重新覆盖一遍。我们这里意识到: 当涉及“维护”时,为了复用而使用“继承”,结局并不完美。利用接口如何? 注意我们上面的超类是有问题的,并不是所有的鸭子都会叫,而且quack方式不同。所以我们想到写2个接口。Flyable { fly(){ } }Quackable{ quack(){ }.. 阅读全文