本篇我们将来分析一下Tomcat中所涉及到设计模式,本文我们将主要来分析外观模式,观察者模式,责任链模式,模板方法模式,命令模式。
在开始本文之前,笔者先说明一下对于设计模式的一点看法。笔者曾经经常看到网上有人讨论设计模式,也偶尔会遇到有人非要严格按照GOF设计模式的类图以及其中的角色去套用别人的设计,只要类图不一样,或者角色多了或者少了就会觉得怎么和官方定义的模式不一样,其实这都是对设计模式...
分类:
其他好文 时间:
2015-08-11 21:26:07
阅读次数:
197
模板方法这个名字看着很陌生,其实在游戏中大量使用了模板方法,因为游戏中玩家、NPC和静态物体等不同的对象,使用多态特性能很好地进行区分。模板方法的定义是:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
举个最简单的玩家和NPC死亡时的逻辑:
流程图如下:代码如下
// MVC.cpp : 定义控制台应用...
分类:
其他好文 时间:
2015-08-11 01:26:32
阅读次数:
159
Tomcat组件生命周期管理
在Tomcat总体结构
(Tomcat源代码解析之二)中,我们列出了Tomcat中Server,Service,Connector,Engine,Host,Context的继承关系图,你会发现它们都实现了org.apache.catalina.Lifecycle接口,而org.apache.catalina.util.LifecycleBase采用了模板方法模式...
分类:
其他好文 时间:
2015-08-10 20:14:14
阅读次数:
226
1.模板方法钩子: 在抽象基类已经有默认的定义,子类选择是否覆盖它在模板方法模式中, 抽象基类中使用 钩子函数(子类视情况是否覆盖) 来达到控制模板方法中 流程控制的 目的设计原则: 高层组件对待低层组件的方式是“别调用我们, 我们会调用你”2.状态模式 ...
分类:
其他好文 时间:
2015-08-08 14:52:49
阅读次数:
136
本章是关于设计模式的最后一讲,会讲到第三种设计模式——行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。先来张图,看看这11中模式的关系:第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三...
分类:
其他好文 时间:
2015-08-05 19:51:22
阅读次数:
163
源码均以JDK1.8作为参考1.定义:
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的机构即可重定义该算法的某些特定步骤。2.解析:
通用类图:
类图解析:
模板方法模式非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。
2.1.抽象模板(AbstractClass)
主要...
分类:
编程语言 时间:
2015-08-04 09:27:02
阅读次数:
162
建造者模式:
定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
类图:
4个角色:
1.Product产品类
通常是实现了模板方法模式。
2.Builder抽象建造者
规范产品的组建,一般是由子类实现。
3.ConcreateBuilder
实现抽象类定义的所有方法,并且返回一个组件好的对象。
4.Direc...
分类:
其他好文 时间:
2015-08-01 11:38:00
阅读次数:
106
模板方法模式:
定义:
定义一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。
在软件开发工程中,如果相同一段代码复制过两次,就需要对设计产生怀疑,架构师要明确地说明为什么相同的逻辑要出现两次或更多次。
模板方法模式的优...
分类:
其他好文 时间:
2015-07-29 17:21:00
阅读次数:
121
设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状...
分类:
其他好文 时间:
2015-07-28 23:01:15
阅读次数:
178
模板方法模式(Templete method) 定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。例: 1 package practice1; 2 3 import java.util.Random; ....
分类:
编程语言 时间:
2015-07-28 10:26:32
阅读次数:
126