重学设计模式(四设计模式总结)

Posted 穆瑾轩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重学设计模式(四设计模式总结)相关的知识,希望对你有一定的参考价值。

1、设计模式总结

    至此,我们已经完成了23种设计模式的学习,最后很有必要做个总结。

    设计模式并不是一种具体的技术,它讲述的是解决问题的思想,是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解与应用

    在软件工程中有个概念,叫高内聚低耦合,它是作为评判一个软件设计的好坏标准之一。

   高内聚:内聚针对的是模块的内部设计,是指一个软件模块内的各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密度高。简单的说就是一个模块是否由相关性很强的代码组成,没有冗余和过于复杂的逻辑,只负责一项任务,也就是常说的符合单一职责原则。

    低耦合:耦合针对的是模块(或类)与模块(或类)之间交互的复杂度,模块间的耦合度取决于模块间接口的复杂性、调用方式以及传递信息,传递的信息越少往往耦合度就越低。

    高内聚低耦合可以保证服务的独立性以及系统的灵活性。因此我们学习设计模式的核心思想与之不谋而合——解耦合(减少可能增加耦合度的设计)。

    不管是前端、还是后端都在趋向于组件化,甚至是应用架构上也诞生了微服务,而组件化、微服务化的思想都是高内聚低耦合的体现。

    我们学习设计模式的核心思想就是解耦合,并不是消除耦合,而是把耦合控制在一定范围,找到稳定点和变化点,运用抽象,把变化点隔离起来。先满足设计原则,再迭代出设计模式

    其实各设计模式之间都是有共通之处的(在java中是抽象、继承、多态、组合的综合运用),有些看起来十分类似但又能解决不同的问题,这些都是前人总结的经验,你也可以组合出更适用于你所编写的程序的一种模式。

声明:原创文章未经允许,不得转载!!!

1.1、设计原则总结

原则定义目的应用
单一职责原则-SRP一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分功能解耦比如:将用户信息分为属性类和行为接口,一个Dao代表一张表
开闭原则-OCP一个软件实体(如类、模块和函数等)应该对扩展开放,对修改关闭降低维护带来的风险
里氏替换原则-LSP继承必须确保超类所拥有的性质在子类中依然成立防止继承泛滥比如:父类中add()-方法被子类重写成subtraction()-减法功能,是没有必要使用继承关系的
接口隔离原则-ISP一个接口只干一件事,接口要瘦不要胖功能解耦
依赖倒置原则-DIP要面向接口编程,不要面向实现编程功能模块解耦比如:控制反转思想的应用(依赖注入),一般有构造注入、set注入或注解注入,因为是接口,可以传递不同的实现类,所以注入才有意义。
迪米特法则-LOD不该知道的不要知道,降低耦合度与复杂度功能解耦比如:外观模式、中介者模式就是它的应用
合成复用原则-CRP优先使用对象组合实现代码复用,其次才是继承降低代码耦合

    详细文章链接:重学设计模式(设计原则)_穆瑾轩的博客

1.2、设计模式总结

1.2.1、创建型设计模式

模式定义目的应用文章链接
单例模式(Singleton Pattern)一个类只有一个实例,同时提供对该实例的全局访问点保证全局唯一性,节约内存主要应用系统的配置信息类、资源访问冲突情况;如:tomcat的ServletContext、Spring的默认注入、日志记录、线程池等等;重学设计模式(单例模式)
原型模式(Prototype Pattern)通过拷贝原型创建新的对象高效创建对象创建一个复杂或非常耗资源的对象的时候使用克隆,避免重复创建的过程; Spring中bean的创建方式有两种单例模式和原型模式;重学设计模式(原型模式)
工厂模式(Factory Pattern)不同条件下创建不同实例封装复杂的创建逻辑统一管理,将对象的实例化延迟,比如:BeanFactory; XML解析时的DocumentBuilderFactory;重学设计模式(工厂模式)
建造者模式(Builder Pattern)将类的构建逻辑转移到类的实例化外部去实现将复杂的构建与表示分离StringBuilder的append方法; SQL中的PreparedStatement; JDOM中的DomBuilder、SAXBuilder;重学设计模式(建造者模式)

1.2.2、结构型设计模式

模式定义目的应用文章链接
适配器模式(Adapter Pattern)允许具有不兼容接口的对象进行协作兼容转换比如:旧系统升级;java.io.InputStreamReader(InputStream java.io.OutputStreamReader(OutputStream)重学设计模式(-适配器模式)
代理模式(Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问增强职责JDK自动的动态代理:java.lang.reflect.Proxy struts2、mybatis中拦截器的实现; Spring中AOP的实现;重学设计模式(-代理模式)
桥接模式(Bridge Pattern)将抽象部分与实现部分分离,使他们可以独立变化将抽象和实现解耦JDBC驱动;日志分类;重学设计模式(桥接模式)
组合模式(Composite Pattern)保证客户端用单个对象与组合对象的一致性整体和部分的统一GUI中的容器;OA系统的组织架构;重学设计模式(组合模式)
外观模式(Facade Pattern)为多个复杂的子系统提供统一的入口简化客户端的调用Hibernate提供的工具类、Spring JDBC工具类;重学设计模式(外观模式)
装饰器模式(Decorator Pattern)运行时增加/修改对象的功能,比生成子类更加灵活增强职能java中IO流的设计; servlet中request对象的设计;重学设计模式(装饰器模式)
享元模式(Flyweight Pattern)通过共享来缓存对象,降低内存消耗优化资源配置线程池、数据库连接池;String类的设计;重学设计模式(享元模式)

1.2.3、行为型设计模式

模式定义目的应用文章链接
模板模式(Template Pattern)一个方法里实现一个算法,并推迟定义算法中的某些步骤,从而让其他类重新定义他们逻辑复用为一些固定的流程类,提供扩展点; javax.servlet.http.HttpServlet中doGet/doPost调用重学设计模式(模板方法模式)
策略模式(Strategy Pattern)分离算法,选择实现移交选择权GUI中的布局管理(比如:可以选择流式布局、网格布局等); Spring中Resource接口资源访问策略;重学设计模式(策略模式)
命令模式(Command Pattern)将请求和与执行请求的职责分离,方便对请求进行储存、传递、调用的管理解耦请求与处理数据库的事务处理机制;命令的撤销与恢复;重学设计模式(命令模式)
责任链模式(Chain of Responsibility Pattern)将特定行为转换为处理程序的独立对象解耦请求的发送者与接受者java中异常处理机制(try-catch);Servlet中过滤器的链式处理;javascript中事件的冒泡和捕获机制;重学设计模式(责任链模式)
状态模式(State Pattern)将表示对象状态的逻辑分散到代表状态的不同类中绑定状态和行为线程对象状态切换 javax.faces.lifecycle.LifeCycle#execute()重学设计模式(状态模式)
观察者模式(Observer Pattern)主要解决多个对象间存在一对多的依赖关系,当一个对象状态改变给其他对象通知的问题解耦观察者与被观察者JDK中提供的观察者 java.util.Observer/ java.util.Observable; java.util.EventListener;重学设计模式(观察者模式)
中介者模式(Mediator Pattern)通过中介者统一管理(大量多对多关系)对象,将对象之间的交互封装在中介者的对象中减少对象间的耦合MVC模式中的C-控制器,连接了M-V; java.util.Timer; java.lang.reflect.Method#invoke()重学设计模式(中介者模式)
迭代器模式(Iterator Pattern)提供一种在不暴露其底层表示的情况下访问聚合对象的元素的方法统一对集合的访问方式JDK内置的collection容器使用了迭代重学设计模式(迭代器模式)
访问者模式(Visitor Pattern)稳定数据结构,定义新的操作行为解耦数据结构和数据操作可以充当拦截器; java.nio.file.FileVisitor-SimpleFileVisitor;重学设计模式(访问者模式)
备忘录模式(Memento Pattern)保存对象的状态,在需要时进行恢复备份、恢复事务的回滚操作;photoshop中的历史记录;重学设计模式(备忘录模式)
解释器模式(Interpreter Pattern)给定一个语言,定义它的语法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子实现特定语法解析正则表达式、EL表达式、数学表达式;自定义的一些解析规则;重学设计模式(解释器模式)

以上是关于重学设计模式(四设计模式总结)的主要内容,如果未能解决你的问题,请参考以下文章

《重学Java设计模式》作者开始录视频了

《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料

《重学Java高并发》disruptor在数据同步场景下的应用实战(技术方案设计实战)

《重学Java高并发》disruptor在数据同步场景下的应用实战(技术方案设计实战)

《重学Java高并发》disruptor在数据同步场景下的应用实战(技术方案设计实战)

重学Java设计模式-结构型模式-享元模式