OO特点:
封装,继承,多态
oo原则 :
封装变化;
多用组合,少用继承;
针对接口编程,不针对实现编程;
高内聚低耦合
设计原则
单一职责原则:单一责任 一个类应该只有一个引起变化的原因
依赖倒置原则:要依赖抽象,不要依赖具体类(Dependency Inversion Principle)
接口隔离原则:为交互对象之间的松耦合设计而努力;
迪米特法则(Law of Demeter)---最少知识原则---->依赖尽可能少的类
开放-关闭原则:对扩展开放,对修改关闭
模式定义:
1.策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
2.命令模式的设计如何支持请求调用者和请求接收者之间的解耦?
命令模式将"请求"封装成对象(命令),以便使用不同的请求、队列或者日志来参数化其他对象。
动作和接收者在命令对象中被绑在一起,命令对象提供一个方法,这个方法封装了一系列动作,调用这个方法就会调用接收者的这些动作
请求调用者持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实施。
接收者知道如何进行必要的工作。
3.装饰者模式 动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
组合和委托可用于在运行时动态的加上新的行为
装饰者一般对组件的客户是透明的;
装饰者会导致设计中出现许多小对象,如果过度使用,会使程序变得很复杂
4.适配器模式 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
对象适配器使用组合(适配器继承了Target,组合了Adaptee),类适配器使用继承(适配器继承了Target和Adaptee)。
5.外观模式 提供了一个统一的接口,用来访问子系统中得一群接口。外观定义了一个高层接口,让子系统更容易使用
6.模板方法 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
工厂方法是模板方法的一种特殊版本,原语操作用来创建并返回对象。
7.迭代器模式 提供一种方法顺序访问一个聚合对象中得各个元素,而又不暴露其内部的表示。
8.组合模式 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合
9.状态模式 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
状态模式允许对象基于内部状态而拥有不同的行为。
状态模式和策略模式有相同的类图,但是它们的意图不同。
策略模式通常会用行为或算法来配置context类
状态模式允许context随着状态的改变而改变行为
状态转换可以由state类或者context类控制
使用状态模式通常会导致设计中类的数目大量增加
状态类可以被多个context实例共享
10. 代理模式 为另一个对象提供一个替身或占位符以控制对这个对象的访问。
RMI将客户辅助对象称为stub(桩),服务辅助对象称为skeleton(骨架)
几种代理控制访问的方式:
远程代理控制访问远程对象;
虚拟代理控制访问创建开销大得资源;
保护代理基于权限控制着对资源的访问。
模式分类
创建类型的模式包括
单例模式 (Singleton Pattern) - 根据单一模式实现的类只允许有一个是类,并且提供了一个全局指针来引用该实例。
工厂模式 (Factory Pattern) - 根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,而这一组类有一个公共的抽象父类。
抽象工厂模式 (Abstract Factory Pattern) - 抽象工厂模式也可以根据提供的数据生成一组类中某一个类的实例,而这一组类有一个公共的抽象父类。只不过它定义的是一个接口。
原型模式 (Prototype Pattern) - 原型模式通过对类的实例进行拷贝来创建新的实例。
创建者模式 (Builder Pattern) - 构造者模式将一个复杂对象的构造过程和它的表现层分离开来,这样类就可以根据不同情况展现出不同的表现方式。
结构类型的模式
结构类型的模式将类和对象组合起来,以构成更加复杂的结构。它又被划分为类模式和对象模式。类模式和对象模式之间的区别在于类模式通过继承关系来提供有效的接口;
而类模式通过对象合成或将对象包含在其它对象中的方式构成更加复杂的结构。
· 适配器模式 (Adapter Pattern) - 适配器模式可以将一个类的接口和另一个类的接口匹配起来。
· 桥接模式 (Bridge Pattern) - 桥梁模式对客户端程序提供一个固定的接口,但是允许开发人员变化实际的实现类。这样开发人员就可以将接口是具体的实现类分离开来。
· 组合模式 (Composite Pattern) - 复合模式可以将多个对象进行复合,其中的每个对象可以是简单对象,也可以是复合对象。
· 代理模式 (Proxy Pattern) - 代理模式利用一个简单的对象替代一个复杂的对象,当复杂对象在需要的时候才会被加载到系统中,这样可以节约系统资源,提高系统的响应速度。在网络环境中这种模式很有用处。
· 装饰模式 (Decorator Pattern) - 通过修饰模式,开发人员可以在运行时将特定的功能绑定在对象上。
· 轻量模式 (Flyweight Pattern) - 轻量模式通过将对象中的一部分数据保存在对象外,在调用对象中的方法时再将这些数据传回对象。这样做可以减少大量比较简单的对象占用的空间。
· 门面模式 (Facade Pattern) - 正面模式将复杂的类层次结构组织起来,通过一个简单的接口来获得层次结构中的数据。
行为类型的模式
行为类型的模式主要是那些处理对象之间通讯的模式,该类型的包括以下模式
观察者模式 (Observer Pattern) - 观测者模式可以在发生变化时将变化通知多个类。
中介者模式 (Mediator Pattern) - 中介模式可以通过一个中间类来控制若干个类之间的通讯,并且这些类相互之间不需要了解对方的信息。
访问者模式 (Visitor Pattern) - 访问者模式通过一个访问类来访问其他类中的数据。
备忘录模式 (Memento Pattern) - 回忆模式可以在不破坏对象封装性的前提下保存和恢复对象的内部状态。
责任链模式 (Chain of Responsibility) - 职责链模式将请求传递给一组对象,只有特定的对象才会处理该请求。这样就进一步削弱类之间的联系。
命令模式 (Command Pattern) - 命令模式将请求传递给特定的对象,这样客户端即使在不知道服务器端如何处理请求的情况下也可以发送请求。
模板模式 (Template Pattern) - 模板模式提供了对算法的抽象定义。
策略模式 (Strategy Pattern) - 策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
状态模式 (State Pattern) - 状态模式将一个类实例的变量保存在独立的内存空间中。
迭代模式 (Iterator Pattern) - 迭代模式在不知道数据的内部表现形式的前提下,通过标准的接口来遍历数据集合中的数据。
解释器模式 (Interpreter Pattern) - 定义语言的文法,并且建立一个解释器来解释该语言中的句子.