代理模式(静态代理)

模式的结构

代理模式的主要角色如下。

  1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。

  2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

  3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

静态代理:

抽象主题:

/**
 * 抽象主题,房东
 *
 * 缺点:跟目标对象一样实现了抽象业务的接口,一旦抽象业务接口
 * 发生改变也必须跟着改变,可以使用动态代理(反射机制)解决
 * */
public interface HouseOwner {
    /**
     * 出租房屋
     * */
    public void rent();
    /**
     * 收租
     * */
    public void getMoney();

}

真实主题:

/**
 * 具体主题 ,民防,城中存房东类
 * */
public class VillageHouseOwner implements HouseOwner{
    @Override
    public void rent() {
        System.out.println("出租单间一个月500,有热水器,有床,有独立卫生间,押一付一");
    }

    @Override
    public void getMoney() {
        System.out.println("收起每月月租,水电费,生活垃圾费");

    }

}

代理类:

/**
 * 代理类,房东代理类
 * */
public class HouseOwnerProxy implements HouseOwner{
    /**
     * 代理类中定义目标类对象类的属性
     * */
    private HouseOwner houseOwner;
    public HouseOwnerProxy(){

    }
    public HouseOwnerProxy(HouseOwner houseOwner){
        this.houseOwner=houseOwner;

    }
    @Override
    public void rent() {
         houseOwner.rent();
         getProxyFee();
    }
    @Override
    public void getMoney() {
      houseOwner.getMoney();
      procedureFee();
    }
    public void getProxyFee(){
        System.out.println("收取半个月的房租费当作中介费用,只收一次");
    }
    public void procedureFee(){
        System.out.println("每个月固定收取手续费50块");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {

        //不适用代理,直接找到房东租房子,把房费直接交给房东
        VillageHouseOwner villageHouseOwner = new VillageHouseOwner();
        villageHouseOwner.rent();
        villageHouseOwner.getMoney();
        //使用代理,租客找到代理对象,创建一个代理类对象,构造方法中传入目标对象(被代理的对象)
        HouseOwnerProxy proxy = new HouseOwnerProxy(new VillageHouseOwner());
       //使用代理类租房子和收租金
        proxy.rent();
        proxy.getMoney();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值