跳至主要內容

[设计模式]-结构型-装饰器模式

holic-x...大约 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