`

一句话总结java23种设计模式

阅读更多

设计模式的六大原则

1、开闭原则(Open Close Principle):对扩展开放对修改关闭

2、里氏代换原则(Liskov Substitution Principle):父类出现的地方,子类也可出现

3、依赖倒转原则(Dependence Inversion Principle):依赖抽象而不依赖具体

4、接口隔离原则(Interface Segregation Principle):多个隔离的接口,比使用单个接口要好

5、迪米特法则(最少知道原则)(Demeter Principle):最少知道原则。一个实体应当尽量少的与其他实体之间发生相互作用

6、合成复用原则(Composite Reuse Principle):尽量使用合成/聚合的方式,而不是使用继承。

 

 

 

创建型模式(五种)

  • 工厂方法模式(Factory):工厂创建对象(经典实现:很多框架初始化时都会创建一个工厂对象,用来加载资源)
  • 抽象工厂模式(Abstractfactory):抽象工厂实例创建对象,工厂可修改,灵活度高(经典实现:Struts2插件机制的核心实现就是BeanFactory这个抽象工厂。Spring IOC加载Bean,AOP创建Proxy)
  • 单例模式(Sington):适用于只需要一个对象的情况(经典实现:Tomcat中StringManager的错误处理机制)
  • 建造者模式(Builder):一步一步创建一个复杂的对象(经典实现:MyBatis中的SQLSession就是结合了Configure,executor等对象,以此来实现SQLSession的复杂功能)
  • 原型模式(Prototype):复制对象,包括深度复制和浅度复制,深度复制重建引用对象,浅度复制不创建(经典实现:java序列化)

结构型模式(七种)

  • 适配器模式(Adapter):通过实现接口,依赖注入,继承等方式为不相关的实体建立关系(经典实现:Tomcat新版本连接器Coyote,就是通过为Connector适配建立了ProtocolHandler与Tomcat组件Connector的关联关系)
  • 装饰器模式(Decorator):创建包装对象修饰扩展被包装对象的功能(经典实现:IO家族中BufferedXxx)
  • 代理模式(Proxy):通过添加中间代理的方式限制,过滤,修改被代理类的某些行为(经典实现:Spring AOP核心实现,DataSource中为Connection创建代理对象,改变close方法的行为,使其从开始的关闭连接变成将连接还回连接池)
  • 外观模式(Facade):通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象。(经典实现:Tomcat中创建外观类包装StandardContext传给Wrapper,创建外观类包装Wrapper以ServletConfiguration的形式传给Servlet,以此来屏蔽不想让Servlet可见的那些Tomcat容器参数)
  • 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化(经典实现:JDBC驱动)
  • 组合模式(Composite):部分与整体,常用于表示树形结构
  • 享元模式(Flyweight):维护资源集合(经典实现:数据库连接池,避免重新开启数据库链接的开销)

 

行为型模式(十一种)

 

  • 策略模式(Strategy):定义多个不同的实现类,这些类实现公共接口,通过调用接口调用不同实例得到不同结果(经典实现:Spring中Bean的定义与注入,Controller,Servcie,repository三层架构中只依赖上一层接口)
  • 模板方法模式(Template):父类定义公共方法,不同子类重写父类抽象方法,得到不同结果(经典实现:Tomcat生命周期中的init,SpringIOC上层类加载具体子类指定的配置文件)
  • 观察者模式(Observer):目标方法被调用,通知所有观察者(经典实现:Tomcat生命周期事件监听,Spring BeanPostProcessor实现 )
  • 迭代子模式(Interator):提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。(经典实现:集合迭代器)
  • 责任链模式(ChainOfResponsibility):链式依赖,依次调用(经典实现:Tomcat Valve)
  • 命令模式(Commond):Action定义具体命令,拦截器Invocation回调执行命令(经典实现:Struts2)
  • 备忘录模式(Memento):建立原始对象副本,用于存储恢复原始对象数据
  • 状态模式(Stage):通过改变状态,改变行为(经典实现:切换装载着不同配置信息的配置文件对象)
  • 访问者模式(Visitor):结构与操作解耦。灵活的操作,放入固定的结构中执行(经典实现:在SpringAOP的实现过程中首先会有一个ProxyCreator去创建切入点,通知之类的,然后创建一个抽象工厂将这些参数对象传递给抽象工厂,抽象工厂调用createAopProxy(this)来创建对象,传入不同的抽象工厂创建出不同的实体对象)
  • 中介者模式(Mediator):MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者
  • 解释器模式(Iterpreter):定义分别定义 + - * / 非终结符,组合不同的非终结符定义不同的表达式,维护繁琐

 

     最近又看了一遍java23种设计模式,网上很多都说java有23种设计模式,但是总感觉不对,像拦截器,监听器,过滤器,mvc难道不属于设计模式吗。这个问题没多大意义,就不讨论了。上次直接把这23种设计模式看完之后当时看小Demo貌似是理解了,但是怎么也不能把23种全部背下来。最近又重新看了一遍,认真的体会了一下其中的思想。其实说这句话有些牵强了,现在的水平再怎么认真也不能把设计模式的思想体会的淋漓尽致。这次与上次的不同是,几乎不用看讲解了,看代码全部能理解小Demo的工作原理。于是试着各用一句话来总结他们。无论是深入理解设计模式的大牛,还是没看过设计模式的初学者。一定会有许多人看到我的总结不知所云。我只是试着按我的思路总结一下。好让自己容易记忆。各位也同样可以按自己的思路各写一句话总结。

 

     如果想快速了解一下设计模式推荐一篇博客:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html。对的,是了解,不是研究。个人感觉设计模式并不是随随便便给你举个现实中的例子就能够学好的。即使例子再生动,想理解设计模式的精髓必须深入到代码中去。例如大多数框架开启时用到的工厂模式;Tomcat中Pipeline中Valve的责任链模式调用;StandardBase中使用代理模式引入LifecycleSupport来增加自身对生命周期的管理能力;LifecycleListener中执行各个监听器时的观察者模式。

     

     个人认为设计模式的学习非一朝一夕能成的东西。它是在自己做开发看源码的工程中慢慢体会出来的。写个小案例,告诉你这叫XX模式,像这种帖子网上已经很多了,没必要再重复了,之后在读源码的工程中遇到好的应用一定会总结到博客中的。

 

     提供一个自己学习设计模式的思路:先看小Demo认识各种设计模式的样子,之后在读源码时再慢慢理解各种设计模式的好处。而且设计模式往往还不是单独一个出现的,例如过滤器加拦截器能实现SpringAOP的功能。知识有限能举的例子也不多,读源码时注意这一点就行。

 

如果想看Demo可以在网上找,也可以在我github网址https://github.com/smallbug-vip/repo上获取,其中大部分源码还是从上面博客中直接拷贝的。



 

  • 大小: 6.9 KB
3
3
分享到:
评论
1 楼 spiniper 2016-02-16  
很早就知道面向对象设计模式,然后看了一点,比如单例模式、工厂和适配器,然后就没怎么看了。后来工作中为了解决问题使用了各种解决方案,回过头来看设计模式,发现很多设计模式已经用得烂熟了,只是不知道名字,特别是装饰模式,javaIO流天天用,后来才知道是装饰模式。jdk里面很多现成的代码实现,基本上涵盖了所有设计模式了。

相关推荐

    Java的23种设计模式

    本文将通过一系列生动的例子来介绍Java中的23种设计模式,并重点探讨前七种设计模式的基本概念和应用场景。 #### 二、设计模式概览 设计模式可以分为三类:创建型模式、结构型模式和行为型模式。其中创建型模式...

    趣味JAVA23种设计模式

    ### 趣味JAVA23种设计模式精解 #### 工厂模式(Factory) 工厂模式是一种常用的软件设计模式,其核心在于分离客户类和工厂类。想象一下,当你带女朋友去快餐店,无论是麦当劳还是肯德基,只需要简单地说一句“来四...

    java二十三种设计模式

    Java 设计模式是一种软件设计模式,旨在解决软件开发中的通用问题。共有 23 种设计模式,分为三大类:创建型模式、结构型模式和行为型模式。下面是对每种设计模式的详细解释: 创建型模式 1. 工厂模式(Factory)...

    Java23种基本的设计模式整料整理学习源码示例zip

    Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip 设计模式的六大...

    追MM与Java的23种设计模式

    【追MM与Java的23种设计模式】这篇文章将编程中的设计模式与追求女性的场景相结合,用生动的例子解释了23种设计模式的核心概念。以下是各设计模式的详细解析: 1. **工厂模式(Factory)**:就像在麦当劳和肯德基...

    23种JAVA设计模式和15种J2EE设计模式.docx

    JAVA设计模式是软件开发中一种常见的设计模式,用于解决软件设计中的一些常见问题。JAVA设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。下面是对每种模式的详细介绍: 创建型模式 创建型模式主要...

    23种设计模式

    在给定的描述中,提到了23种设计模式,这里我们将深入探讨其中的五种:工厂模式、建造者模式、工厂方法模式、原型模式和单例模式。 1. **工厂模式**:工厂模式是一种简单的创建型模式,它定义了一个创建对象的接口...

    JAVA设计模式(策略模式)—视频

    策略模式是对算法的包装,是吧使用算法的责任和算法本身分割开来,委派给不同的对象管理。 策略模式通常把一个系列的算法包装到一系列的... 一句话来形容:准备一组算法,并将每一个算法封装起来,使得他们可以互换。

    java 设计模式 java pattern

    Java设计模式尤其受到重视,因为它们可以帮助开发者编写出更加灵活、可维护和可扩展的代码。在Java中,设计模式主要分为三大类:创建模式、结构模式和行为模式。 创建模式关注对象的创建过程,旨在在不暴露创建细节...

    java设计模式解释

    Java设计模式是面向对象编程中的重要概念,它们是解决常见软件设计问题的模板,通过将通用解决方案模式化,使得开发者可以快速有效地应对各种场景。以下是对标题和描述中提到的几种设计模式的详细解释: 1. **工厂...

    Java与设计模式.ppt

    设计模式是软件开发中的一种重要思想,用于解决常见的设计问题并提供可复用的解决方案。在Java中,设计模式能够使代码更加简洁、高效,并且易于维护。本篇主要介绍几种常见的创建型设计模式:工厂模式和工厂方法模式...

    SpringBoot-DesignMode:Java 23种设计模式Demo案列大全 ☞ SpringBoot框架

    SpringBoot-DesignModeJava 23种设计模式Demo案列大全 ☞ SpringBoot框架【每种设计模式都会标记不同的package,每种设计模式例子尽量全、尽量通俗易懂、尽量符合JavaDoc规范】如任务链测试说明: /** * 通过两种...

    《JAVA设计模式》期末考试复习资料复习进程.pdf

    Java设计模式是面向对象编程中的一种最佳实践,它是一套被广泛接受和应用的解决常见设计问题的经验总结。设计模式的起源并非源自机械设计、建筑工程设计、工业电力化设计或水利工程设计,而是从软件工程中逐渐发展...

    设计模式Demo

    针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...

    java算法设计应用程序设计

    "对数据结构知识的熟练有一个很好的锻炼",这句话强调了掌握各种数据结构(如数组、链表、栈、队列、树、图等)的重要性。例如,树形数据结构在表示层次关系、搜索和排序等方面非常有用,如二叉搜索树、红黑树、AVL...

    一个参考Junit的设计模式ppt

    JUnit作为一个强大的单元测试框架,它的设计理念、核心特性和背后的优秀设计模式,对Java开发人员来说是不可或缺的工具。通过理解和熟练运用JUnit,开发者可以更有效地进行测试,提升代码质量,降低维护成本,从而...

    Java的常用设计模式

    说起设计模式,很多编程语言的设计模式大同小异,而且设计模式很多,这里介绍一下java的几种常见的设计模式,其实设计模式是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便,所以要降低依赖,降低耦合...

    j2se一句话学习笔记

    41. **学习方法**:学习编程时要注重实践,理解面向对象的思维,使用设计模式解决问题,注重代码的可扩展性、可维护性。 以上就是对标题和描述中提到的Java SE相关知识点的详细解析,这些知识点涵盖了Java桌面应用...

    酒店客房管理系统源码java-DesignPattern:我总结的一些设计模式学习

    所以一句话概括就是: 为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。 里氏代换原则(Liskov Substitution Principle):对开闭原则的补充。任何基类可以出现的地方,子类...

Global site tag (gtag.js) - Google Analytics