装饰者模式&代理模式

一、装饰者模式

装饰者模式,在保持原有功能不变的情况下将一个类重新装饰,使其具有更强大的功能,用一句成语形容“锦上添花”。

类结构:


Component:抽象组件,定义了一组抽象的接口,指定了被装饰的组件都有哪些功能。

ComponentImpl:抽象组件实现类,完成了基本的功能实现

Decorator:装饰器角色,持有Component的实例引用,有点递归的感觉。


伪代码:

Component c=new ComponentImpl();
Decorator d1=new Decorator();
d1.setComponent(c);
Decorator d2=new Decorator();
d2.setComponent(d1);
Decorator d3=new Decorator();
d3.setComponent(d2);
Decorator d4=new Decorator();
d4.setComponent(d3);
d4.methodA();

装饰者模式和适配器模式有点类似,都是包装(wrapper)了一个类,但目地却不相同。适配器模式是将一个接口转换成另一个接口,从而达成匹配。而装饰者模式并没有改变原来的接口,而是改变原有对象的处理方法,借助递归提升性能。


二、代理模式

代理模式,为其它对象提供一种代理以控制对这个对象的访问。

类结构图:



Subject:接口类,定义了一些需要代理的接口方法

RealSubject:具体的实现类

ProxySubject:代理类,保存一个Subject引用,可以注入一个具体的子类比如RealSubject。


代理模式其实就是在操作对象时引入一定程度的间接性。这种间接性,可以增加很多附加操作。比如权限控制,参数校验等等


接口类

/**
 * 个人信息管理
 * @author onlyone 
 */
public interface PersonManager {

    /**
     * 查询工资
     * @param name 被查人的名字
     * @param operateName 操作人名字
     */
    public double getSalary(String name,String operateName);
}

具体实现类

/**
 * 具体的实现类
 * 
 * @author onlyone
 */
public class RealPersonManager implements PersonManager {

    @Override
    public double getSalary(String name, String operateName) {

        // 查询数据库,返回具体的工资数
        return 1000000;
    }

}

代理类

/**
 * 代理类
 * 
 * @author onlyone
 */
public class ProxyPersonManager implements PersonManager {

    // 接口引用
    PersonManager realPersonManager = new RealPersonManager();

    @Override
    public double getSalary(String name, String operateName) {

        // 1. 增加一些的权限判断。比如操作人是否有查询某人工资的权限
        // 2. 具体类的调用
        return realPersonManager.getSalary(name, operateName);
    }

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值