六大原则和设计模式列表

六大原则:

单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因

开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展

里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象

依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程

接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口

迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用,高内聚,低耦合

设计模式列表

创建型
静态工厂:
解决对象创建问题,建议使用静态工厂替代构造方法,因为使用静态工厂大家都掉同一个接口可以进行控制,比如事先生成对象,直接返回等
链接:https://blog.csdn.net/weixin_43060721/article/details/82154004

工厂方法:
静态工厂的进一步抽象,每一个产品都有一个工厂,这些工厂都有一个抽象工厂,也是解决对象创建问题,解决静态工厂所有对象创建都放在一个类中的问题,如果有新产品加入可以直接扩展,问题就是容易类泛滥
链接:https://blog.csdn.net/weixin_43060721/article/details/82154004

抽象工厂:
工厂方法的进一步抽象,在产品这个维度上进行抽象,将产品分为几套,然后根据各套再进行工厂的搭建,解决一套对象的创建问题,问题和工厂方法一样,容易类泛滥
链接:https://blog.csdn.net/weixin_43060721/article/details/82154004

单例模式:
解决生成单个对象问题
链接:https://blog.csdn.net/weixin_43060721/article/details/82154330

原型模式:
解决快速生成多个一模一样的对象问题
链接:https://blog.csdn.net/weixin_43060721/article/details/82154330

建造者模式:
解决生成复杂对象问题,多步骤对象或者多部分对象
链接:https://blog.csdn.net/weixin_43060721/article/details/82155766

结构型
适配器模式:
解决功能描述一样但是接口不统一问题
链接:https://blog.csdn.net/weixin_43060721/article/details/82226912

桥接模式:
解决两个维度描述同一事物问题
链接:https://blog.csdn.net/weixin_43060721/article/details/82227318

装饰者模式:
解决类似于java.io包这种在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象
链接:https://blog.csdn.net/weixin_43060721/article/details/82227318

组合模式:
解决部分和整体统一问题,比如树状结构,叶和枝就需要统一接口才好遍历
链接:https://blog.csdn.net/weixin_43060721/article/details/82229050

外观模式:
解决包对外调用复杂问题,即不承载任何功能,但是将所有功能都集于一身(违反单一功能原则,但降低类耦合)
链接:https://blog.csdn.net/weixin_43060721/article/details/82313877

静态代理:
解决功能增强问题,即在不改变原有代码结构的基础上,实现功能增强
链接:https://blog.csdn.net/weixin_43060721/article/details/82313877

享元模式:
解决建立重复对象问题,可以将重估对象化为只创建一次重复使用(前提是能重复使用)
链接:https://blog.csdn.net/weixin_43060721/article/details/82314177

动态代理:
解决动态增强功能问题,和静态代理区别在于动态生成代理类
链接:https://blog.csdn.net/weixin_43060721/article/details/82354930

观察者模式:
解决按键监听器或者发布订阅模式问题(钩子函数)
链接:https://blog.csdn.net/weixin_43060721/article/details/82467310

访问者模式(visitor模式):
解决双重分派问题,在不动原来代码的情况下,对原代码进行透明调用问题(源代码是访问者模式设计的才行)
链接:https://blog.csdn.net/weixin_43060721/article/details/82468400

行为型
策略模式:
解决自定义算法替换问题(抽象行为,随时进行行为替换)
链接:https://blog.csdn.net/weixin_43060721/article/details/82118435

状态模式:
解决类似状态机问题(抽象数据,随时进行数据替换)
链接:https://blog.csdn.net/weixin_43060721/article/details/82118435

责任链模式:
解决类似web Filter机制的消息过滤问题(也可以是消息处理)
链接:https://blog.csdn.net/weixin_43060721/article/details/82390418

模板方法:
和策略模式类似,解决自定义算法替换问题,不过模板方法是算法结构固定只解决部分算法的替换
链接:https://blog.csdn.net/weixin_43060721/article/details/82390683

迭代器模式(游标模式):
解决一个对象的遍历问题
链接:https://blog.csdn.net/weixin_43060721/article/details/82391009

中介者模式:
解决将网状类图改为星状类图问题(将各个类之间相互持有的强耦合转化为只需要持有中介者即可的弱耦合)
链接:https://blog.csdn.net/weixin_43060721/article/details/82430851

备忘录模式:
解决一个对象需要恢复到以前状态的问题(和状态模式的区别在于,状态模式是各个固定状态之间的跳转,备忘录模式是随机状态的恢复,而这些状态不需要事先定义,因为状态其实就是数据)
链接:https://blog.csdn.net/weixin_43060721/article/details/82431364

解释器模式:
解释器模式解决某一领域重复出现的特定问题,使用普通编程方法极度复杂,需要这一特定领域的特定语法,解释器模式就是用来解释这种语法,比如说计算器
链接:https://blog.csdn.net/weixin_43060721/article/details/82469049

你可能感兴趣的:(设计模式)