原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6548127.html

  所谓职责型模式,就是采用各种模式来分配各个类的职责。

  职责型模式包括:单例模式、观察者模式、调停者模式、代理模式、职责链模式、享元模式六大模式。

编号 设计模式 使用场景
1 单例模式 将职责集中到某个类的单个实例中
2 观察者模式 将对象从依赖他的对象中解耦
3 调停者模式 将职责集中在某个类,该类可以监督其他对象的交互
4 代理模式 让一个对象扮演其他对象的行为
5 职责链模式 允许将请求传递给职责链的其他对象,直到这个请求被某个对象处理
6 享元模式 将共享的、细粒度的对象职责集中管理

  现在分别讲述:

1、单例模式——将职责集中到某个类的单个实例中

  通过编码来限制某个类只能生成一个实例对象,所有针对该类的访问全部体现到这个实例身上。正如Spring中体现的:在Spring的上下文(ApplicationContext)创建之后,会通过扫描器将所有标注注解的类各生成一个实例,并将这个实例保存到这个上下文环境(ApplicationContext)中,程序启动完成后,需要使用某个类的实例时,就从这个上下文环境中获取。由于采用的是单例模式,所以针对一个类的多次访问所获取的对象为同一对象,这些调用者可能同时调用这个实例来完成某种功能。

  从内存的方面考虑,当这个单例生成之后,会保存在Java堆内存中,以备调用,其中成员变量保存在实例中,而局部变量在方法中(此时是没有存放位置和值的,只有方法被调用时,才会生成局部变量的存储位置与值,这个位置在线程中,而不再方法中),这些局部变量保存在每一个调用线程中,因此局部变量不会产生冲突(各执一份),但是成员变量是公用的,一旦涉及到对其的修改,就会发生冲突,这时最好的解决方法就是加锁(使用synchronized),加锁的目的(或者说是效果)就是控制CPU在执行某个线程时不会中断,具体说就是控制在单例中的某个方法的某一段代码块被执行时CPU会一直执行完毕,不会中断线程去执行别的线程,这样当另一线程执行时不会对之前执行中的线程产生影响(因为之前的线程已经执行完毕),他获得的将会是原始的数据(针对成员变量)。

  题外话:高并发的两个影响:1-高并发会导致服务器高压力(解决方法:消息队列、缓存、分布集群、负载均衡等);2-高并发会导致访问冲突(解决方法:加锁)

2、观察者模式——将对象从依赖它的对象中解耦

  当一个对象被多个其他对象所依赖,一旦修改这个对象,将会对所有依赖于它的对象造成影响,解耦势在必行。采用观察者模式,将所有依赖于这个对象的对象抽象成为观察者,所有具体的观察者都实现(继承)观察者接口(抽象类),然后修改这个被依赖对象的类,在其内部添加观察者集合及集合操作(增加观察者,删除观察者等),以此来实现观察者模式。

  因为被观察者与观察者的关系是一对多的关系,而且这些观察者可以被动态增删,所以需要使用集合来保存这些观察者对象,并提供增删操作。

  观察者模式又称为发布-订阅模式,显而易见,发布与订阅分属双方,发布一方可看成被依赖对象,订阅一方是依赖对象,一个消息发布,所有的订阅者都能查收到提示信息,并查看这条消息。

3、调停者模式——将职责集中在某个类,该类可以监督其他对象的交互

  调停者,即调解者,意即处理复杂关系,调理顺序,规整结构,使变得顺序井然,结构简单,去杂存真。

  将系统中杂乱的调用关系转换到调停者身上,所有的互动都经过调停者的中转来完成,复杂的调用变得方向一致对向调停者。

  实现方法很简单,创建一个调停者类,将所有的调用请求都绑定到该类身上即可。

  调停者模式是为了去除系统内部的复杂性而产生的。

4、代理模式——让一个对象办理其他对象的行为

  代理的目的其实是为了隐藏,将真正的操作隐藏起来,对外只提供一个接口,调用者只需知道这个接口的作用,而不必知道如何来实现这个功能。

  其实代理除了上面的作用之外,还有扩展功能的作用,创建一个目标类的代理类,在代理类的方法中调用目标类的方法,而在代理类的方法中还可以添加其他代码,这样在不修改目标类的情况下实现了功能扩展。

  代理有两种:静态代理与动态代理,动态代理又分为两种:JDK动态代理与CGLIB动态代理。

  静态代理是编译时代理,而动态代理是运行时代理。

5、责任链模式——允许将请求传递给职责链的其他对象,直到这个请求被某个对象处理

  通过代码将一系列请求处理对象串联起来,就形成了一条职责链,这里的职责就是处理请求,串联的方式很简单,在每一个请求处理对象中都拥有一个指向下一个请求处理对象的成员变量,而在处理代码中拥有是否跳向下一个请求处理对象的判断,这样通过对成员变量赋值的方式就可以形成这样一条请求处理链。

  这种模式一般处理现实中类似的情况。

6、享元模式——将共享的、细粒度的对象职责集中管理

  享元就是共享单元,共享元素,元素就是最基本单位,所谓细粒度就是针对元素而言的。将一系列调用中公共的处理部分完全可以单列出来,形成一个单独的实例对象,被统一调用,而不用为每个调用生成一份实例,大大的节省了内存空间,类似于单例模式。

Java设计模式之职责型模式总结的更多相关文章

  1. Java设计模式之行为型模式

    行为型模式共11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 策略模式:策略模式的决定权在用户,系统本身提供不同 ...

  2. Java设计模式之创建型模式

    创建型模式分为五类:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 一.工厂方法模式:接口-实现类.工厂类

  3. Java设计模式系列1--原型模式(Prototype Method)

    2014-02-14 11:27:33 声明:本文不仅是本人自己的成果,有些东西取自网上各位大神的思想,虽不能一一列出,但在此一并感谢! 原型模式,从名字即可看出,该模式的思想就是将一个对象作为原型, ...

  4. java设计模式之职责链模式

    责任链模式 设计模式很多时候都是看见名字都知道意思,责任链,见名知义为请求创建一系列处理对象. 此模式基于请求的类型将请求的发送方和接收方分离.通常每个接收器包含对另一个接收器的引用.如果一个对象不能 ...

  5. Java设计模式_创建型模式_单例模式

    单例模式的实现: 定义一个类,在类中定义该类的静态变量,再定一个一个获取该类的静态变量的方法. UML图:

  6. 设计模式之职责链模式(JAVA实现)

    学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...

  7. Java设计模式 - - 单例模式 装饰者模式

    Java设计模式 单例模式 装饰者模式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 静态代理模式:https://www.cnblogs.com/StanleyBlogs/p/1 ...

  8. Java 设计模式泛谈&装饰者模式和单例模式

    设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到 ...

  9. java设计模式之Proxy(代理模式)

    java设计模式之Proxy(代理模式) 2008-03-25 20:30 227人阅读 评论(0) 收藏 举报 设计模式javaauthorizationpermissionsstringclass ...

随机推荐

  1. 动软模板系列二(Model层模板)

    动软模板其实和CodeSmith的模板差不多 实现的原理是一样的,但是CodeSmith貌似只支持表生成,而且不够“国人化”,所以打算研究下动软的模板,如果熟练掌握后想必以后开发项目效率可以提高很多了 ...

  2. MVC 怎么把string字符串转译成html格式

    Views层下:

  3. Xamarin 小试牛刀 通知栏消息通知和按钮(基于Java代码人肉转换)

    本示例基于网友现有安卓项目人肉翻译,在Xamarin中替换和修改了很多方法的命名,比如某些属性需要去掉getName的get前缀, 有些方法名称需要使用Pascal命名法替换Java的Camel 命名 ...

  4. 《JAVASCRIPT高级程序设计》DOM扩展

    虽然DOM为XML及HTML文档交互制定了一系列的API,但仍然有几个规范对标准的DOM进行了扩展.这些扩展中,有很多是浏览器专有的,但后来成了事实标准,于是其他浏览器也提供了相同的实现:浏览器开发商 ...

  5. MySQL的my-innodb-heavy-4G.ini配置文件的翻译

    我根据MySQL配置文件的英文文档说明,在根据自己所学的知识,使用有道词典对不懂的单词进行了查询,一个一个翻译出来的.有的专业术语翻译的不好,我使用了英文进行标注,例如主机(master)和副机(sl ...

  6. Quartz_理解2

    一.核心概念   Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.   1.Job 表示一个工作,要执行的具体内容.此接口中只有一个方法 void exec ...

  7. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  8. Superwebsocket 模拟微信聊天室

    在园子里潜水几年了,工作以来算是有些积累,突然想写点东西方便以后温故而知新,希望自己能够坚持下去. 关于Superwebsocket的介绍我就不多说了,请点击:http://www.cnblogs.c ...

  9. SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异

    在数据库服务器上想还原一个数据库到某个备份文件时期的,服务器的数据库文件本身是保存在 D:\DEVDB目录 通过开发电脑上的MS manager来连接数据库服务器操作还原 虽发现文件卡项上,原始文件名 ...

  10. .Net程序员学用Oracle系列(18):PLSQL Developer 攻略

    1.功能说明及使用技巧 1.1.对象浏览器 1.2.SQL 窗口 1.3.测试窗口 1.4.命令窗口 1.5.图表窗口 1.6.报告窗口 1.7.右键菜单 1.8.快速登录技巧 1.9.其它 2.总结 ...