java设计模式7.策略模式、模板方法模式、观察者模式
- 策略模式
策略模式的用意,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
- 环境角色:持有一个抽象策略角色的引用。
- 抽象策略角色:给出所有的具体策略类所要实现的接口。
- 具体策略角色:包装相关的算法或行为。
- 模板方法模式
模板方法的用意,使用一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以用不同的方式来实现这些抽象方法。
- 抽象模板角色:1. 定义一个或多个抽象操作,以便让子类实现。这些操作叫做基本操作,它们是一个顶级逻辑的组成步骤。2. 定义一个模板方法,给出一个顶级逻辑的骨架,逻辑的组成步骤在对应的抽象操作中,推迟到子类中实现。
- 具体模板角色:实现父类定义的所有抽象方法,它们是一个顶级逻辑的组成步骤。
- 观察者模式
观察者模式又叫监听模式或者发布-订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象(主题对象中会维护一个观察者对象的集合),使它们能够自动更新自己。
- 抽象被观察角色:主题角色把所有对观察者对象的引用保存在一个聚集中,另外提供接口,以便增加和删除观察者对象。
- 抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。
- 具体被观察角色:将有关状态存入具体观察者对象,在具体主题状态改变时,给所有观察者发出通知。
- 具体观察者角色:实现抽象观察者要求的接口。
- 示例:servlet
Java的Servlet提供了J2EE技术的Web构建的基础,它提供了Servlet、JSP和EJB等架构。所有的Servlet必须遵循Java Servlet API,这个API由两个库及一系列类组成:
- javax.Servlet:提供普通的Servlet模型。
- javax.Servlet.http:提供HTTP和HTTPS的Servlet模型。
普通Servlet模型只是假定协议是建立在TCP/IP之上的,并没有对请求-回答的协议作出任何具体的假设,所有与HTTP和HTTPS有关的逻辑均在javax.Servlet.http库中,这种办法可以在最大程度上把可能发生变化的部分与一般性逻辑分开。
Servlet库中有三个类提供了Servlet主要的技术架构,分别是Servlet接口、GenericServlet类和HttpServlet类。
- Servlet接口声明了三个方法:init();destory(); 以及service();这三个方法决定了Servlet的生命周期。
- GenericServlet是一个抽象类:它提供了Servlet接口的默认实现,但是留下了一个service()方法由具体的Servlet类实现。
- HttpServlet继承自GenericServlet,本身也是抽象类,但是它为所有方法提供了默认实现,包括service();doGet();doHead();doPost();doPut();doDelete();doOption();doTracle()。
Servlet的生命周期由接口javax.Servlet.Servlet所定义,所有的Servlet必须在一个Servlet引擎所提供的容器环境里运行,因此必须直接或间接地实现Servlet接口,才能在Servlet容器环境里运行,并且由容器管理它的生命周期:加载-初始化-就绪-销毁。
模板方法模式的应用:HttpServlet的service()方法。
观察者模式的应用:
Servlet引擎的事件可以分成Servlet环境事件和Session事件,通过Servlet引擎的事件机制可以做如下工作:
- 管理数据库和各种资源的使用及释放。
- 建立计数机制。
- 监听HTTP Session的状态及属性。
Servlet环境事件:
Session事件:
上述两种事件机制涉及到4个监听器接口,它们都是java.util.EventListener(标记接口)的子接口。web容器在启动时会初始化一个全局对象ServletContext时,ServletContext提供add和remove接口来管理Listener。所以当上下文环境发生变化时,可以通知所有的Listener作出相应的动作。
#笔记内容参考《java与模式》
java设计模式7.策略模式、模板方法模式、观察者模式的更多相关文章
- Java设计模式菜鸟系列(十)模板方法模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- Java设计模式(21)访问模式(Visitor者模式)
Visitor定义:作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元 ...
- Java设计模式(19)状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式 State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If else ...
- Java设计模式(17)解释器模式(Interpreter模式)
Interpreter定义:定义语言的文法,并且建立一个解释器来解释该语言中的句子. Interpreter似乎使用面不是很广,它描述了一个语言解释器是如何构成的,在实际应用中,我们可能很少去构造一个 ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- Java设计模式(15)备忘录模式(Memento模式)
Memento定义:memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态. Memento模式相对也比较好理解,我们看下列代码: public class ...
- Java设计模式(13)模板模式(Template模式)
Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: pu ...
- Java设计模式(12)迭代模式(Iterator模式)
上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...
- Java设计模式(11)外观模式(Facade模式)
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { C ...
随机推荐
- python基础——变量
变量是只不过保留的内存位置用来存储值.这意味着,当创建一个变量,那么它在内存中保留一些空间. 根据一个变量的数据类型,解释器分配内存,并决定如何可以被存储在所保留的内存中.因此,通过分配不同的数据类型 ...
- Android的简述3
Activity的生命周期 Activity类中有许多onXXX形式的函数可以重载,比如onCreate,onStart,onStop,onPause,那么它们的调用顺序到底是如何的呢?下面就通过一个 ...
- T-SQL 小全
--====================================================== ----数据库概念:创建.删除.使用数据库 ----================= ...
- python多进程详解
目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...
- powermockito单元测试之深入实践
概述 由于最近工作需要, 在项目中要做单元测试, 以达到指定的测试用例覆盖率指标.项目中我们引入的powermockito来编写测试用例, JaCoCo来监控单元测试覆盖率.关于框架的选择, 网上讨论 ...
- JavaScript数据结构——链表的实现与应用
链表用来存储有序的元素集合,与数组不同,链表中的元素并非保存在连续的存储空间内,每个元素由一个存储元素本身的节点和一个指向下一个元素的指针构成.当要移动或删除元素时,只需要修改相应元素上的指针就可以了 ...
- 【Java例题】1.3给朋友的贺卡
3.对“Hello World”程序进行改造, 能够显示一张发给朋友的贺卡.格式如下: ****************************** 张三,你好! 祝你学习愉快! 你的好朋友:李四 2 ...
- 素数筛法(Eratosthenes筛法)
介绍 Eratosthenes筛法,又名埃氏筛法,对于求1~n区间内的素数,时间复杂度为n log n,对于10^6^ 以内的数比较合适,再超出此范围的就不建议用该方法了. 筛法的思想特别简单: 对于 ...
- 工作中常见的五种技术leader
力不从心型 在工作中有种技术leader,总认为自己是最好的.在方案设计的时候,自己有一种方案,下属有一种方案.leader非要别人听他的.如果两种方案没有优劣之分,比较建议的做法是让真正实施的人按照 ...
- js常见兼容性问题以及解决方法
1.关于使用 event对象,出现的兼容性问题IE/Chrom: event.clientX;event.clientYFF/IE9以上/Chrom: 传参e e.clientX;e.client ...