设计模式

Object Oriented简称OO

软件开发唯一不变的真理change:软件开发完成后需要花费更多的时间

多态
(英语:polymorphism),是指计算机程序运行时,相同的消息可能会送给多个不同的类之对象,而系统可依据对象所属类,引发对应类的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。

封装在面向对象程序设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函数界面的实现细节部分包装、隐藏起来的方法。同时,它也是一种防止外界调用端,去访问对象内部实现细节的手段,这个手段是由编程语言本身来提供的。这两个概念有一些不同,但通常被混合使用。封装被视为是面向对象的四项原则之一。

适当的封装,可以将对象使用界面的程序实现部分隐藏起来,不让用户看到,同时确保用户无法任意更改对象内部的重要数据。它可以让代码更容易理解与维护,也加强了代码的安全性。

继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。 一般静态的面向对象编程语言,继承属于静态的,意即在子类别的行为在编译期就已经决定,无法在执行期扩充。

策略模式(strategy pattern)

栗子:鸭子类,飞行行为,呱呱叫行为,如果加入熟料鸭子,木制鸭子

策略模式:定义算法族,分别封装起来,让他们之间相互替换,此模式让算法的变化独立于使用算法的客户

为了复用(reuse)而使用继承,结局并不完美

分开变化和不变化的部分

设计行为:将变化的部分放在分开的类中,此类专门提供某行为借口的实现。

设计原则:针对接口编程而不实针对实现编程。多用组合,少用继承。

把特定具体的行为编写在分开的类中

把每组行为想象成一个算法族

“针对接口编程”的真正意思是“针对超类型(supertype)编程

观察者模式(Observer)

栗子:气象站随即更新目前状况,气象统计和天气预报

主题(Subject)和观察者(Observer)

观察者模式:定义对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

主题是一个具有状态的对象,并且可以控制这些对象,观察者使用这些状态。
主题接口:对象使用此接口注册为观察者,或者把自己从观察者中删除
观察者接口:所有潜在的观察者都必须实现观察者接口,这个接口只有update()一个方法,当主题状态改变时他被调用。
具体主题:总是实现主题接口,除了注册和撤销方法之外,具体主题还是实现了notityObserver()方法,此方法用于在状态改变时更新所有当前观察者。具体主题也可能有设置和获取状态的方法,getState(),setState()。

依赖:数据-程序依赖(英语:program-data dependence),是一种软件数据相互关系。

具体指一旦某个应用程序改变了,相应的数据也要随之改变。各种不同的传统计算机程序需要定义数据的位置和属性。在传统的文件环境里,软件程序的改变要求对于需要访问的数据也做相应的改变[1]。

松耦合:耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。

强内聚:内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出[1]。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。

其间的依赖关系:因为主题是真正拥有数据的人,观察者是主题的依赖者。