一、六大原则
- 开闭原则
一个软件实体类,模块,函数应该对扩展开放,对修改关闭。比如百度搜索,搜索是永恒的需求,只是按照什么条件搜索排序会有调整。 - 里式替换
原则上,任何基类可以出现的地方,子类都可以出现。里式替换是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,里式替换是对开闭原则的补充,实现开闭原则的关键步骤就是抽象化。而基类与子类的集成关系就是抽象化的具体实现,所以,里式替换原则是对实现抽象类的功能,但不能改变父类原有功能 - 单一职责功能
一个类只负责一项职责 - 依赖倒置原则
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不该依赖细节。就是说要多用抽象的接口来描述相同的动作,降低实现这个动作 - 接口隔离原则
一个类对另一个类的依赖,应该建立在最小的接口上,尽量包与包之间不要互相依赖 - 迪米特法则
一个对象应该对其他对象保持最少的了解,类与类之间关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。尽量一个类只完整的实现一个功能
二、分类
创建型模式
- Singleton单例模式:保证一个类仅有一个实例,并提供访问它的全局访问点
- AbstractFactory抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类
- Factory Method工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延时到其子类
- Builder建造者模式:将一个复杂对象的构建与他表示分离,使得同样的构建过程可以创建不同而表示
- Prototype原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象(深拷贝浅拷贝)
结构型模式
- Adapter适配器模式:将一个类的接口转换成客户端希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
- Bridge桥接模式:将抽象化与实现化脱耦,使二者可以独立的变化
- Composite合成/组合模式:将对象组合成树形结构,以表示部分“部分,整体”的层次结构,组合模型使得用户对单个对象和组合对象的使用具有一致性
- Decorator装饰模式:动态的给一个对象加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活
- Facade外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一系列更加容易使用
- Flyweight享元模式:运用共享技术有效的支持大量的细粒度的对象
- Proxy代理模式:为其他对象提供一种大力,以控制这个对象的访问
行为型模式
- Chain Of Responsibility职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。讲这些对象连成一条链,并沿着这条链传递请求
- Command命令模式:讲一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作
- interpreter解释器模式:给定一个语言,定义它文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
- Mediator中介者模式:用一个中介对象来封装一系列对象的交互。中介这使各对象不需要显示的相互引用,从而使其耦合松散,并且可以独立的改变他们之间的交互
- Memento备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到保存的样子
- Iterator迭代器模式:提供一种方法书序访问一个聚合对象中的各个元素,而又不暴露内部表示
- Observer观察者模式:定义了一种一对多的依赖关系,让多观察者同时监听某一主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象
- State状态模式:当对象的内在状态改变时,允许改变其行为,这个对象看起来是改变了基类
- Strategy策略模式:它定义了算法家族,分别封装起来,让他们可以可以相互替换,此模式让算法变化,不会影响到其他算法的用户
- Visitor访问者模式:表示一个作用于某对象结构中的个元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
- Template_Method模板方法模式:定义一个操作中的算法骨架,而将一个据图步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义改算法的某些特定操作