最近在看tomcat源码的时候发现里面有很多经典设计模式的运用案例,正好趁此机会熟悉一下设计模式,为了保证代码原味性,就直接复制粘贴了,以下代码不能运行,但是能看明白,可以用来学习和借鉴。
相关设计模式:享元模式
//最少处理器个数 protected int minProcessors = 5; //最大处理器个数 private int maxProcessors = 20; //当前处理器个数 private int curProcessors = 0; //用于存放使用完的处理器 private Stack<Object> processors = new Stack<Object>(); //用于存放新创建的处理器 private Vector<Object> created = new Vector<Object>(); /** * 处理器使用完以后将处理器加入处理器池中, * @author fjding * @date 2016年4月18日 下午10:04:54 * @param processor * =================Modify Record================= * @Modifier @date @Content * fjding 2016年4月18日 下午10:04:54 新建 * */ private void recycle(HttpProcessor processor) { processors.push(processor); } // /** * 通过该方法可以获得处理器池中的线程 * @author fjding * @date 2016年4月18日 下午10:05:59 * @return * =================Modify Record================= * @Modifier @date @Content * fjding 2016年4月18日 下午10:05:59 新建 * */ private HttpProcessor createProcessor() { synchronized (processors) { //池中有处理器可用 if (processors.size() > 0) { return ((HttpProcessor) processors.pop()); } //如果处理器池中没有可以用的处理器,则判断当前的处理器个数(此时池中是空的)是否大于设置最大处理器个数, if ((maxProcessors > 0) && (curProcessors < maxProcessors)) { //没有则创建 return (newProcessor()); } else { //如果处理器最大个数被设置为-1,则要多少个处理器就创建多少个,不受限制 if (maxProcessors < 0) { return (newProcessor()); } else { return (null); } } } } /** * 创建一个新的处理器 * @author fjding * @date 2016年4月18日 下午10:25:36 * @return * =================Modify Record================= * @Modifier @date @Content * fjding 2016年4月18日 下午10:25:36 新建 * */ private HttpProcessor newProcessor() { //当创建一个处理器,则当前处理器标记加1,给改处理器设置了个名字,线程也是这么做的 HttpProcessor processor = new HttpProcessor(this, curProcessors++); if (processor instanceof Lifecycle) { try { ((Lifecycle) processor).start(); } catch (Exception e) { log("newProcessor", e); return (null); } } created.addElement(processor); return (processor); }
相关推荐
工厂模式有一个内部存储池,用于保存已经创建的享元对象,当需要创建新对象时,首先检查存储池中是否存在相同的内部状态对象,如果存在则直接复用,否则创建新的对象并添加到存储池中。 在上述文件上传示例中,`...
实现享元模式通常需要一个单例工厂(Singleton Factory),它负责创建和管理享元对象。工厂会维护一个池(Flyweight pool),存储已经创建的享元对象。当需要新的对象时,工厂首先检查池中是否存在具有匹配内部状态...
- 享元模式:运用共享技术有效地支持大量细粒度的对象。 3. 行为型模式: - 责任链模式:将请求沿着处理者链传递,直到找到合适的处理器为止。 - 命令模式:将请求封装为一个对象,以便使用不同的请求、队列或者...
例如,一个文字处理器中使用的字符对象就可以利用享元模式来优化内存使用。 #### 12. 代理模式(Proxy) 代理模式为其他对象提供一个代理以控制对这个对象的访问。它通常用于需要增加额外职责的情况,比如远程代理...
Java中`String`池就是享元模式的典型应用。 12. **命令模式**:将请求封装为一个对象,从而可用不同的请求、队列请求、记录请求以及支持可撤销的操作。 13. **责任链模式**:将请求沿着处理器链传递,直到某个...
- 复用模式(享元模式):运用共享技术有效支持大量细粒度的对象。 3. 行为型模式: - 责任链模式:将请求沿着处理者链进行传递,直到有处理器处理该请求为止。 - 命令模式:将请求封装为一个对象,以便使用不同...
- 享元模式(Flyweight):使用共享技术有效地支持大量细粒度的对象。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,增加功能而不影响其结构。 3. 行为型模式(Behavioral Patterns): - ...
11. **享元模式**:运用共享技术有效地支持大量细粒度的对象。在Java中,常用于内存优化,例如字符串池。 12. **外观模式**:为子系统提供一个统一的接口,使得子系统的复杂性对客户端隐藏起来。 13. **模版方法...
11. **享元模式**:使用共享技术有效地支持大量细粒度的对象,减少内存消耗。 12. **组合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 13. **...
- **实例**:在图形编辑器中,可以使用享元模式来高效地存储和渲染大量的相同或相似的图形对象。 #### 24. **备忘录模式(Memento Pattern)** - **定义**:在不破坏封装性的前提下,捕获一个对象的内部状态,并...
在Go中,常见的创建型模式包括抽象工厂模式(Abstract Factory)、建造者模式(Builder)、工厂方法模式(Factory Method)和对象池模式(Object Pool)以及单例模式(Singleton)。抽象工厂模式提供了创建一系列...
以上只是部分设计模式在ASP.NET开发中的应用示例,实际开发中可能涉及更多模式,如组合模式、享元模式等。通过对这些设计模式的深入理解和灵活运用,开发者可以更好地构建高效、可维护的ASP.NET应用程序。
在Java中,String池就是一个享元模式的例子。 12. **命令模式 (Command)**:将一个请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求或者支持撤销操作。在Java中,Swing的ActionListener就是命令...
2. 结构型模式:理解适配器、装饰器、代理、桥接、组合、外观和享元模式。 3. 行为型模式:掌握策略、模板方法、迭代器、观察者、职责链、命令、解释器模式。 通过《2018年最新版Java程序员面试宝典题库.pdf》,...
本文分析了在非线性编辑系统中应用GPU资源池虚拟化技术,实现可按需分配的GPU运算资源池的需求背景、技术方案与应用模式,重点讨论了现有电视节目生产制作流程的不足与面临的困难,提出了适用于广电行业非编系统的...
- **享元模式**:通过对象池等方式复用大对象,减少内存消耗。 - **装饰者模式**:动态地给对象添加新的责任或行为。 - **观察者模式**:实现异步通信,提高系统的响应速度。 - **值对象模式**:将多个属性组合成一...
- 结构型模式:适配器、装饰器、代理、桥接、组合、外观、享元。 - 行为型模式:模板方法、观察者、迭代器、责任链、命令、策略、状态、访问者、备忘录、解释器。 9. **反射与注解** - 反射API:Class类、...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...