静态代理模式

一、什么是代理模式?

代理模式分为静态代理和动态代理。
代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
举个例子:我想买一部苹果手机,但是该手机店很远,所以在本地设立一个手机店,卖的是同款苹果手机,该店铺相当于一个代理店。由于苹果手机需要去苹果工厂购买不划算,然后我想自己造山寨手机卖,同时不让用户发现。
静态代理:只存储一个对象,是固定的。

二、具体代码展示

phone类接口:

public interface Phone {
    //给手机制定的规则
    public void call();//能打电话
    public void playGame();//能玩游戏
    public void photo();//能拍照
}

真的苹果手机类:

public class Cellphone implements Phone{
    //描述手机类
    //描述属性
    private String name;
    private String color;

    //构造方法
    public Cellphone(){}
    public Cellphone(String name,String color){
        this.name = name;
        this.color = color;
    }

    //方法
    public void call(){
        System.out.println("打电话很流畅");
    }

    public void playGame(){
        System.out.println("打游戏不烫手");
    }

    public void photo(){
        System.out.println("拍照很清晰");
    }

山寨手机类:

public class Cellphon implements Phone{
    //假的手机
    private String name1;
    private String color1;

    public Cellphon(){}
    public Cellphon(String name1,String color1){
        this.name1 = name1;
        this.color1 = color1;
    }

    public void call(){
        System.out.println("电话打的卡顿");
    }
    public void photo(){
        System.out.println("拍照马赛克");
    }
    public void playGame(){
        System.out.println("玩游戏烫手");
    }
}

store类接口:

public interface Store {
    //商店只做一件事情---卖手机
    public Phone sellPhone();
}

真的苹果工厂:

public class CellphoneStore implements Store {
    //描述手机工厂
    //生产手机
    //手机类和工厂类是什么关系??依赖关系
    //依赖关系用代码如何实现??一个类的方法里使用到另一个类的对象
    //参数传递 或者  创建对象
    private Cellphone productCellphone(){
       Cellphone cellphone = new Cellphone("oppo","white");
       return cellphone;
    }

    //销售手机
    public Cellphone sellPhone(){
        return this.productCellphone();
    }

}

代理商类:

public class ProxyStore implements Store{
    //代购工厂
    //聚合关系
    private  CellphoneStore cellphoneStore = new CellphoneStore();

    //生产手机---假手机
    private Cellphon productCellphon(){
        Cellphon cellphon = new Cellphon();
        return cellphon;
    }

    //销售手机---有假手机、有新手机
    public Phone sellPhone(){
        return this.productCellphon();//假的手机
        //return this.cellphoneStore.sellPhone();//真的手机
    }
}

test类:用户购买手机

public class TestMain {

    public static void main(String[] args) {
        //表示用户
        //创建的是代理工厂
        Store store = new ProxyStore();
        //卖手机
        Phone cellphon = store.sellPhone();
        cellphon.call();
        cellphon.photo();
        cellphon.playGame();
    }
}

【运行结果】:用户从对象、方法上看不出来是真手机还是假的。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李宸净

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值