设计模式六大原则
1.开放封闭原则:对扩展开放,对修改封闭,意即程序拓展时不要动原有的代码
2.LSP原则:任何基类可以出现的地方,子类一定可以出现
3.依赖倒置原则:使用接口,依赖于抽象而不是具体
4.接口隔离原则:为了解耦,使用多个相互隔离的接口
5.迪米特法则:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6.CRP法则:尽量使用合成/聚合的方式,而不是使用继承。
分类
1.创建型模式(在创建对象的过程中尽量隐藏创建细节,不直接使用new)
2.结构型模式(主要关注类和对象的继承、组合)
3.行为型模式(关注对象之间的通信)
工厂模式
现在要创建一些对象,他们都实现了某个接口或者继承了某个类。我们不在需要的时候使用new操作符,而是把创建的操作让一个“工厂类”完成,我们在需要新对象时只需要把需要的东西的名字以参数形式传递给工厂类就行了,而不用去管怎么创建的。
抽象工厂模式
在工厂模式中,一个工厂类只生产实现某个接口或者继承了某个类的对象,也就是具体工厂生产具体对象,如果建立一个抽象工厂类和若干个具体工厂,每个具体工厂负责产生一类对象,就成了抽象工厂模式。就是一个抽象工厂类可以生产多种类型的对象,具体每种类型的对象怎么生成,要用一个专门的工厂类来决定。
建造者模式
现在要创建一个很复杂的对象,我们把这个工作分开来做,先定义并实现一个建造者类,在这个类中实现构建这个对象所需要的全部方法。再定义并实现一个导演类,把一个建造者类传给它,让它负责这些方法调用的逻辑次序和对象的组合,然后统一给客户端返回一个生成好的复杂对象。
适配器模式
一个类和另一个类有一些相似的操作,但是它们的形式是不一致的,需要有一个东西把它包裹起来,变成另一种比较合适的形式。
装饰器模式
一个类有一些方法,但是我们想让这些方法调用的时候多执行一些东西,于是可以定义一个装饰器的类,它和被修饰的类同时一个类的子类或是一个接口的实现,然后将这个被修饰的类委托给这个装饰器类,如果想使用这个修饰后的方法,只需要调用这个修饰器的方法就可以了。
观察者模式
一组对象依赖于某一个对象,这个对象的状态的更新会影响这一组对象,于是把这组对象称为观察者,放在被观察者一个不定长数组的字段里,两者分别保存对方的引用,被观察者更新时会调用观察者的方法来提醒观察者。
访问者模式
我现在有一个类,上面有一些操作,但是我不想把它写到这个类里,所以我把这个功能单独拿出来,需要执行这个功能的时候,把这个类的引用给那个功能类,让那个功能类操作这个类。
状态模式
一个类,他的一些操作的具体过程是根据它当前的状态来决定的,而这个状态取决于当前环境的上下文。
策略模式
对于一个操作,实现它的算法有很多,我把这些算法每个都建立一个类,实现那个方法类的接口,在需要执行这个操作的地方,要运用某个算法,只需要把那个算法对应的类传进去就行了。
迭代器模式
一个类,里面有一组元素,要按照某个次序一次访问这些元素,于是单独设立一个迭代器,无需暴露内部复杂实现,直接告诉你当前是哪个元素、下一个是哪个元素,就可以按照这种特定次序遍历这些元素了。