摘要:
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。通过动态地组合对象,可以写新的代码添加新功能,而无须修改现有代码。既然没有改变现有代码,那么引进bug或产生意外副作用的机会将大幅度减少。设计原则类应该对扩展开发,对修改关闭。定义装饰者模式动态地将责任附加到对象上。若需要扩展功能,装饰者提供了比继承更有弹性的替代方案。类图:写个具体的例子(蛋糕~~)来演示下://Cake类public abstract class Cake { public String descriprion = ... 阅读全文
随笔分类 - 设计模式
Head First 设计模式之入门
2012-11-17 15:47 by ...平..淡..., 192 阅读, 收藏,
摘要:
开启自己的设计模式学习。先来用一个老套的鸭子的例子做介绍,来初涉设计模式领域。Duck具有功能:但继承Duck类的子类在fly和quack方法上,会有改变。修改后,最终效果为:设计原则:(1)从基类找出应用中可能需要变化之处,把它们独立出来,不要把它们和不需要变化的代码混在一起。(把这些需要改变的行为用分别创建接口来表示)(2)针对接口编程,而不是针对实现编程。 (创建子类实现接口,将具体实现放在这些子类中;而不是直接定义在Duck类中,或者Duck的子类中)一、分析:"针对接口编程"真正含义是"针对超类型编程"。针对接口编程,关键在于多态。例子: 针对 阅读全文
观察者模式
2012-11-16 16:13 by ...平..淡..., 228 阅读, 收藏,
摘要:
观察者模式涉及对象:被观察者类、观察者类。(一对多的关系)观察者模式简单地说:就是当被观察者发生改变时,通知所有观察者。具体做法是(主要部分分析):被观察者类中定义setChanged方法,设置改变;定义notifyObservers方法(该方法中会调用观察者的update方法)通知观察者。观察者类是一个接口,定义update方法。(多个观察者都是实现这个接口)其实就是在被观察者类中定义一个判断条件,当观察者发生变化时,调用setChanged方法(即将判断条件的值置为true);然后调用Observable类的notifyObservers方法,该方法中会调用Observer类的update 阅读全文