装饰模式

装饰者模式-自定义连接池

廉价感情. 提交于 2020-03-17 12:26:29
装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例 为什么要有连接池 数据库的连接对象创建工作,比较消耗性能。 如何创建简单的连接池 在内存中开辟一块空间(集合),一开先往池子里面放置 多个连接对象。 后面需要连接的话,直接从池子里面取。不要去自己创建连接了。 使用完毕, 要记得归还连接。确保连接对象能循环利用。 代码实现自定义连接池 import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.sql.DataSource; /** * 这是一个数据库连接池 * 一开始先往池子里面放10个连接 * * 1. 开始创建10个连接。 * * 2. 来的程序通过getConnection获取连接 * * 3. 用完之后,使用addBack 归还连接。 * * 4. 扩容。 * * * 问题: * * 1.

设计模式——装饰器模式

℡╲_俬逩灬. 提交于 2020-03-16 14:47:06
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 装饰器模式结构图 Component(抽象构件) :它是装饰类和具体构件的公共父类(一般是接口或者抽象类); ConcreteComponent(具体构件) :具它是抽象构件对象的子类,用来定义具体的构件对象(Component的子类或者具体实现); Decorator(抽象装饰类) :进继承抽象构件,用于给具体的构件添加一些新的职责(一般是一个继承了Component的接口); ConcreteDecoraror(具体装饰类) :实现了抽象装饰类,它负责向构件添加新的职责; 代码演示 业务场景: 现我们现在模拟这样一个场景,我们点了一杯奶茶,然后给奶茶中加了冰块,加了珍珠,最后我们还想再给加点红豆,这里加红豆就使用了装饰者。 我们先来创建一个奶茶的抽象类,这个就是上面的 Component 角色 public interface MilkyTea { public void recipe(); } 我们再来创建要给奶茶的具体子类,相当于 ConcreteComponent public class MilkyTeaA implements MilkyTea { @Override public void recipe

Python基础知识之装饰器

蹲街弑〆低调 提交于 2020-03-14 02:25:13
                      装饰器 https://www.cnblogs.com/EVA-J/articles/7194277.html 1. 装饰器的形成过程 2.装饰器的作用 3.语法糖 原则: 开放封闭原则 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 固定模式:装饰器固定模式 =========================================================================================== 1. import time def func(): time.sleep(0.01) print("大家好") def timer(f): start = time.time() f() end = time.time() print(end-start) timer(func) 解读这段代码 !   首先 ,我们定义一个函数 func为例实现 leader交给我的功能! ok ,这个func函数假装已经完成我们想要的功能 。  

Servlet过滤器快速入门

不打扰是莪最后的温柔 提交于 2020-03-12 12:23:37
提前阅读: https://blog.csdn.net/Su_Levi_Wei/article/details/50665835 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ Servlet过滤器 ↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Servlet过滤器; 为什么要有? 如果有N多个Servlet要执行一样的操作的时候, 没有必须要在所有的Servlet都进行相同的代码操作, 那样会造成代码冗余性变大,也会使得开发效率低下。 是什么? 是Servlet中的三大组件之一,是由SUN公司制定的标准/接口 过滤器的本质就是一个java应用中的一个对象而已。。。。。。 作用; 过滤器可以在一个请求资源【动态或静态】的资源时, 或者是在响应资源时,执行过滤任务【代码逻辑】 ◆ 因为是在Serlvet业务逻辑之前执行的, 所以可以进行一些关键的操作, 用于提高用户体验,以及提高开发效率 因为没有必须都写在所有要使用 这个业务逻辑代码的Servlet中写, 只是需要把对应的Servlet和 服务器进行关联 如;1.在请求资源和响应资源的时候所有Servlet的编码集 2.用户统一登录的权限,就是只有用户登录了才可以进行访问某些资源。 特点;

装饰者模式(Decorator pattern)

半城伤御伤魂 提交于 2020-03-12 04:54:16
说起来惭愧,在某群解答别人问题时居然回答错误,羞煞我也。为此特地补习一下。 :( 装饰者模式 作用: 动态给对象添加职责 典型案例: 在一般的留言本中(支持UBB)输入文本,按B设置为粗体,I为斜体,实际上就是给文本动态的加上了<b>文本</b>,<I>等文字环绕</I>,而后通过解释器进行替换于是就有了最终页面的效果。这样的思路是很简单的,然而对于面向对象的实现方式来说其实还是有点麻烦的. 鉴于关于文本的例子过多,我们这里举的例子采用Stream的简化版本 类图: 对于.Net Framework中存在N种流, FileStream, MemoryStream, BinaryStream, NullStream等等,无非这些Stream都是Stream的确定实例,而通过CryptoStream的子类来对各种流进行加密解密等等功能的操作,在我们的类图里使用SecurityStream和子类HashedStreamDecorator, SHAStreamDecorator等来表示 关于实现的代码的方式则很简单,相信读者通过类图即可得到程序。实际BCL中的Stream会麻烦许多,会有很多的虚方法,Read, Seek,同步流,异步流等等,然而架构是一样的 关于动态职责的添加还有很多实现,这里还有一种AOP的方法, :) http://msdn.microsoft.com/en-us

设计模式-装饰模式

二次信任 提交于 2020-03-10 09:50:04
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例 Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能 接口Sourceable: public interface Sourceable { public void method(); } Source被装饰类: public class Source implements Sourceable { @Override public void method() { System.out.println("the original method!"); } } Decorator装饰类: public class Decorator implements Sourceable { private Sourceable source; public Decorator(Sourceable source){ super(); this.source = source; } @Override public void method() { System.out.println("before decorator!"); source.method(); System.out.println("after

心得---字符流、缓冲流、装饰模式

若如初见. 提交于 2020-03-09 08:11:52
1. Reader类和Writer类用来专门处理字符流。这两个类都是抽象类,从他们派生出了许多子类,增强功能、提高效率,实现各种不同要求的字符输入/输出流的处理。 IO体系中的子类名后缀都是父类名称,而前缀都是体现子类功能的名字。字符流用于存储和检索文本。两者的使用方法与InputStream类和OutputStream类基本相同,不同的是,这两个类以Unicode字符为单位进行读写,当写入一个16 位的Unicode字符时,按字节分成两部分,先写高位字节,后写低位字节。 对于读取或者写入流对象的构造函数,以及读写方法,还有刷新关闭功能都会抛出IOException或其子类,所以都要进行处理。 2. Reader 抽象类java.io.Reader是所有字符输入流类型的父类,其中声明了用于读取字符流的有关方法,其类层次关系为: 3. Reader类中定义的方法 µ public int read():读取一个字符,返回的是读到的那个字符。如果读到流的末尾,返回-1。 µ public int read(char[] cbuf):将读到的字符存入指定的数组中,返回的是实际读取的字符数。如果读到流的末尾,返回-1。 µ public abstract int read(char[]cbuf,int off,int len):将读到的字符存入数组的指定位置(off)

设计模式笔记-装饰器模式

让人想犯罪 __ 提交于 2020-03-08 21:12:14
设计模式 装饰器模式 文章目录 设计模式 装饰器模式 定义 假定场景 运行时修改对象的行为 饮料相关代码 行话 注意 java io的装饰器模式 自定义一个装饰器类 一个比继承更具有可扩展性的设计模式。这种设计模式带来的直接好处是 对扩展开发,对修改关闭 ,这是一个重要的设计原则。当然,它也带来了一些问题,比如:类数量较多,客户端程序员难以理解。但是,只要理解了这种设计模式的结构就可以轻松地使用这种设计模式相关的api,比如java io相关的api。本文会在末尾基于 装饰器模式 对java io做一个总结。 定义 动态地赋予对象新的责任。 所谓 动态 的意思是 在运行时而非编译时 。而 继承 是在编译时就决定了的,所以 继承 必须在 编译时 完成对类的扩展。 继承 导致的问题就是 死板 ,即代码灵活性较低,因为我们总要先在某个子类中定义好需要扩展的行为,再去另外一个子类中定义需要扩展的行为…直到所有子类。当子类个数较多时就会非常复杂。 所谓 责任 是指 行为/功能 。特别需要说明的是,我们 绝对不改变 现有类 的行为,我们只改变 当前类 该行为的结果 ,这两个类具有相同的接口(注意,所谓接口是指可以接收相同的消息,所以我使用 具有 而非 实现 二字)。 上述解释通过阅读下述假定场景可知。 假定场景 请先看下面的 饮料相关代码 。 假定要卖咖啡,所以要计算所有种类咖啡的价格

设计模式:装饰着模式

你说的曾经没有我的故事 提交于 2020-03-08 20:23:30
装饰者模式的应用场景 覆盖,扩展, is-a,前置, 写法 -代理 装饰者模式( Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能) 装饰者在代码程序中适用于以下场景: 1、用于扩展一个类的功能或给一个类添加附加职责。 2、动态的给一个对象添加功能,这些功能可以再动态的撤销。 代码示例:继承(纵向扩展)和装饰(横向扩展) 装饰着和适配器对比 装饰者模式的优缺点 优点: 1、装饰者是继承的有力补充,比继承灵活,不改变原有对象的情况下动态地给一个对象 扩展功能,即插即用。 2、通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。 3、装饰者完全遵守开闭原则。 缺点: 1、会出现更多的代码,更多的类,增加程序复杂性。 2、动态装饰时,多层装饰时会更复杂。 来源: https://www.cnblogs.com/LPJ-BLOG/p/12444497.html

装饰设计模式详解

夙愿已清 提交于 2020-03-08 00:43:27
在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。 装饰模式的定义与特点 装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。 装饰(Decorator)模式的主要优点有: 采用装饰模式扩展对象的功能比采用继承方式更加灵活。 可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。 其主要缺点是:装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。 装饰模式的结构与实现 通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰模式的目标。下面来分析其基本结构和实现方法。 1. 模式的结构 装饰模式主要包含以下角色。 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。 具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。