设计模式6大原则:单一职责,依赖倒转,开放封闭,里氏代换,接口隔离迪米特
单一职责原则(SRP):一个类只专注于一个功能,且仅有一个改变它的原因。
怎么用:单行代码的职责单一
单个变量职责单一
方法职责单一
类或结构或结构职责单一
模块职责单一
详情: http://blog.youkuaiyun.com/blogtjf/article/details/45129921
依赖倒转:针对接口编程,不针对实现编程。
开放封闭原则:对扩展开放,对修改封闭。
里氏代换原则:子类必须能够替换父类。把程序里的父类换成子类,程序的的行为不应该发生任何变化。(子类可以扩展但不能改变父类原有的功能)
接口隔离原则:一个类对另一个类的依赖建立在最小接口上。
迪米特原则:类与类之间应使用尽可能少的方法来关联,避免千丝万缕的关系。
1简单工厂模式(没有抽象工厂类):所有产品都在一个非抽象的工厂类内部根据传入的参数动态实例化。违反了开放封闭原则。例子:抽象运算基类(产品基类),加、减、乘、除四个产品继承他,工厂类根据传入的运算符号,new并返回。
2工厂方法模式(有抽象工厂类):相比于简单工厂模式,定义了一个抽象工厂基类,具体工厂类继承它,一个工厂类只负责实例化对应的一个产品对象,满足了开放封闭原则。当增加新产品时,只需增加一个工厂类,而不用修改原有工厂类。例子:抽象运算基类,加、减、乘、除四个类子类继承他,定义四个工厂类继承抽象工厂类,new并返回相应的操作加减乘除的对象。
3策略模式:当有任务需要多个功能不同但接口相同的算法,定义一个算法策略基类,每个算法继承这个策略基类。定义一个算法调用Context类,保存算法策略抽象类的引用,并利用多态进行具体算法对象的动态调用,即把
new算法对象的任务放到context类中完成。
4观察者模式:又叫订阅发布模式,用户界面view作为观察者,model是被观察者,view观察业务数据的变化,数据变化后,model通知界面进行更新
5单例模式:static Single*getinstance(),任何时刻,访问成员数据必须依靠属于类的唯一的static对象完成。
6代理模式:为一个类做一个代理(实质是保存这个类的对象引用),这个代理完成跟这个类相同的工作,并且可以增加其他想要的功能比如被代理类访问权限控制。
7适配器模式:对一个接口太复杂的类做一个封装,即做一个客户端便于访问的适配器类。
8门面模式:当客户端想要访问多个类的接口时,为这些类做一个facade类,客户端只需要访问façade类的接口就能完成工作,façade
类对这些系统类进行封装时需使用系统类的单例。
9中介者(Mediator)模式:用中介者来封装一系列对象的交互,使各对象不需要显式地相互引用,从而使其松耦合。例子:房东和房客保存一个中介者引用,收发信息统一由中介者完成,而中介者负责根据不同的对象完成发送信息。