什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就装饰者模式简要概述。
什么是装饰者模式
装饰者模式就是对已有对象在不改变原有结构的情况下增加功能,这种模式可以动态的增加和撤销功能,是属于结构型模式。
使用场景
1、已有对象不改变原有结构的情况下增加功能
2、对已有对象动态的增加和撤销功能
优势与劣势
优点:可以动态的增加和撤销对象功能,防止继承带来的静态属性膨胀,降低代码耦合。
缺点:对于多层装饰者代码编写较为复杂,可读性降低。
小试牛刀
比如我们业务本身只有验证密码功能,但是某些功能需要在验证密码的基础上验证权限。此时如果用继承虽然可以解决这个问题,但是今后再增加其他的验证逻辑又要继承。所以,我们用装饰者模式增加一个装饰类,用装饰类来增加功能完成我们的业务需求。
首先创建验证用户接口CheckUser,添加其实现类PasswordCheck类并提供验证密码的方法。然后,增加一个装饰抽象类CheckDecorator,以验证用户对象作为属性,增加验证方法并调验证用户验证方法。创建一个权限验证的装饰类来继承验证装饰抽象类,复写构造方法和验证方法,在验证方法中调用验证用户已有方法,并增加验证权限逻辑。
依赖关系为:
1、创建验证用户接口并提供验证方法
/**
* 验证用户接口
* @author senfel
* @version 1.0
* @date 2022/8/19 9:42
*/
public interface CheckUser {
/**
* 验证方法
*/
void check();
}
2、增加验证密码并实现验证用户接口
/**
* 密码验证
* @author senfel
* @version 1.0
* @date 2022/8/19 9:42
*/
public class PasswordCheck implements CheckUser{
@Override
public void check() {
System.err.println(">> 验证密码成功");
}
}
3、增加一个装饰器抽象类,传入验证用户对象,便于今后多个装饰者调用
/**
* 抽象验证装饰
* @author senfel
* @version 1.0
* @date 2022/8/19 9:44
*/
public abstract class CheckDecorator implements CheckUser{
private CheckUser checkUser;
public CheckDecorator(CheckUser checkUser) {
this.checkUser = checkUser;
}
/**
* 验证方法
*/
@Override
public void check(){
checkUser.check();
}
}
4、增加验证权限装饰者
/**
* 验证权限功能
* @author senfel
* @version 1.0
* @date 2022/8/19 10:03
*/
public class PermissionCheckDecorator extends CheckDecorator{
public PermissionCheckDecorator(CheckUser checkUser) {
super(checkUser);
}
/**
* 验证方法
*/
@Override
public void check(){
super.check();
//增加验证权限功能
permissionCheck();
}
private void permissionCheck() {
System.err.println(">> 验证权限");
}
}
5、测试装饰者模式
/**
* 装饰着模式测试
* @author senfel
* @version 1.0
* @date 2022/8/19 9:55
*/
@SpringBootTest
public class TestDecoratorPattern {
@Test
public void test(){
//密码验证对象
PasswordCheck passwordCheck = new PasswordCheck();
//装饰者执行
new PermissionCheckDecorator(passwordCheck).check();
}
}
测试结果:
验证密码成功
验证权限
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154691.html