1 Star 0 Fork 0

star / docs

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
2017-10-10-继承&装饰者&动态代理.md 1.59 KB
一键复制 编辑 原始数据 按行查看 历史
hui.zhang 提交于 2020-08-04 17:12 . 添加历史笔记

继承/装饰者/动态代理

[TOC]

1. 对象增强的手段

  • 继承
  • 装饰者模式
  • 动态代理

2. 继承

2.1 继承的使用

被增强的对象是固定的 被增强的内容也是固定的

class 咖啡类 {}
class 有糖咖啡 extends 咖啡类 {}
class 加奶咖啡 extends 咖啡类 {}
class 加盐咖啡 extends 咖啡类 {}

2.2 继承的缺点

  1. 增强的内容是死的,不能动
  2. 被增强的对象也是死的
  3. 使用继承会造成类的暴增!

3. 装饰者模式

3.1 装饰者使用

被增强的对象是可以切换的 增强的内容是固定的

装饰者模式
1. 增强的内容是不能修改
2. 被增强的对象可以是任意的

class 咖啡类 {}
class 有糖咖啡 extends 咖啡类 {}
class 加奶咖啡 extends 咖啡类 {}
class 加盐咖啡 extends 咖啡类 {}

咖啡 a = new 加糖();
咖啡 b = new 加盐(a); //对a进行装饰,给a加盐
咖啡 c = new 加奶(b);

4. 动态代理

被增强的对象可以切换 增强的内容也可以切换

装饰:
不知道被增强的对象的具体类型时,可以使用!
是你还有你,一切拜托你!
is a
has a
use a
class MyConnection implements Connection { // 是你
	// 还有你
	private Connection con; // 底层对象,被增强对象
	public MyConnection(Connection con) { // 通过构造器传递底层对象
		this.con = con;
	}
	// 一切拜托你
	public Statement createStatement() {
		return con.createStatement();
	}

	// 增强点
	public void close() {
		// 把当前连接归还给池!
	}
}
1
https://gitee.com/stefan95/docs.git
git@gitee.com:stefan95/docs.git
stefan95
docs
docs
master

搜索帮助