设计模式之装饰者模式

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路设计模式之装饰者模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就装饰者模式简要概述。

什么是装饰者模式
装饰者模式就是对已有对象在不改变原有结构的情况下增加功能,这种模式可以动态的增加和撤销功能,是属于结构型模式。

使用场景
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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!