[设计模式]-结构型-装饰器模式
...大约 2 分钟
[设计模式]-结构型-装饰器模式
基本概念
装饰器模式的应用:IO流构建
// 简单案例分析
class Person
{
public void eat()
{
System.out.println("吃饭...");
}
}
class newPerson extends Person
{
public void eat()
{
System.out.println("饭前开胃酒...");
super.eat();
System.out.println("饭后甜点...");
System.out.println("饭后休闲...");
}
}
class newWrapperPerson
{
/**
* 装饰者模式:
* 1.定义一个私有的装饰对象
* 2.提供一个带参数的构造函数初始化该对象
* 3.根据需求在原有功能的基础上扩展相应的功能
*/
private Person p;
public newWrapperPerson(Person p)
{
this.p = p;
}
public void eat()
{
System.out.println("开始吃饭、聊天...喝喝小酒...");
p.eat();
System.out.println("饭后甜点...");
System.out.println("饭后休闲...");
System.out.println("吃饭结束...");
}
}
public class WrapperDemo {
/**
* 装饰者模式是为了解决给类的功能增强而出现的
* --对Writer根据不同的业务进行划分
* Writer
* |------TextWriter
* |------MediaWriter
* |------ImageWriter
*
* ---随着业务功能的提升 这时需要对Writer再次改写 要求提升性能 --利用缓冲
* Writer
* |------TextWriter
* |----BufferedTextWriter
* |------MediaWriter
* |---BufferedMediaWriter
* |------ImageWriter
* |---BufferedImageWriter
*
* ---业务进一步提升需求 这时要求 对Writer 提高容错性和完整性 --- 利用差异传输...
* Writer
* |------TextWriter
* |----BufferedTextWriter
* |----InfoExceptionBufferedTextWrite
* |------MediaWriter
* |---BufferedMediaWriter
* |---InfoExceptionBufferedMediaWriter
* |------ImageWriter
* |---BufferedImageWriter
* |----InfoExceptionBufferedImageWriter
*
* 可以利用装饰者模式 解决继承来实现功能增强的这种行为
* Writer
* |---TextWriter
* |---MediaWriter
* |---ImageWriter
* |---BufferedWriter
* |--InfoExceptionWriter
*
* class BufferedWriter extends Writer{
* private TextWriter textWriter;
* public BufferedWriter( TextWriter textWriter){
* this.textWriter=textWriter;
* }
* }
*
* 使用装饰者模式的 特点:
* 1.装饰者中的构造函数 必须接受被装饰的类
* 2.装饰的类和被装饰的类应该属于同一个体系
*/
public static void main(String[] args) {
newWrapperPerson nwp = new newWrapperPerson(new Person());
nwp.eat();
}
}
案例分析
⼀般在业务开发的初期,往往内部的ERP使⽤只需要判断账户验证即可,验证通过后即可访问ERP的所有资源。但随着业务的不断发展,团队⾥开始出现专⻔的运营⼈员、营销⼈员、数据⼈员,每个⼈员对于ERP的使⽤需求不同,有些需要创建活动,有些只是查看数据。同时为了保证数据的安全性,不会让每个⽤户都有最⾼的权限。那么以往使⽤的 SSO 是⼀个组件化通⽤的服务,不能在⾥⾯添加需要的⽤户访问验证功能。这个时候我们就可以使⽤装饰器模式,扩充原有的单点登录服务。但同时也保证原有功能不受破坏,可以继续使用
Powered by Waline v3.1.3