讲解代理设计模式,让代理帮你完成工作

DBC 696 0
  • 代理设计模式(Proxy Pattern)
    • 为其他对象提供一种代理以控制对这个对象的访问,属于结构型模式。
    • 客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象

 

  • 应用场景
    • 各大数码专营店,代理厂商进行销售对应的产品,代理商持有真正的授权代理书
    • 客户端不想直接访问实际的对象,或者访问实际的对象存在困难,通过一个代理对象来完成间接的访问
    • 想在访问一个类时做一些控制,或者增强功能
  • 角色
    • Subject: 抽象接口,真实对象和代理对象都要实现的一个抽象接口,好比销售数码产品
    • Proxy: 包含了对真实对象的引用,从而可以随意的操作真实对象的方法,好比 代理加盟店
    • RealProject :真实对象,好比厂商销售数码产品
  • 讲解代理设计模式,让代理帮你完成工作插图

业务需求

小滴课堂-老王,想开个数码小卖部,为以后退休生活做准备,代理各大厂商的手机和电脑,用代理设计模式帮他实现下

Subject 卖手机

RealProject 苹果、华为厂商,核心是卖手机,但是选址不熟悉

Proxy 老王数码专卖店:代理卖手机,附加选地址,增加广告等

编码实战——小例子——先看结构图讲解代理设计模式,让代理帮你完成工作插图2
/**
 * 抽取公共的方法
 */
public interface DigitalSell {

    void sell();
}
/**
 * @Description 代理对象,增加了功能
 **/

public class DigitalSellProxy implements DigitalSell {

    private DigitalSell realObj = new DigitalSellReal();

    @Override
    public void sell() {

        
        makeAddress();
        realObj.sell();
        makeAD();

    }



    private void makeAddress(){
        System.out.println("一个人流量很高的地址");
    }


    private void makeAD(){
        System.out.println("投放广告");
    }

}
/**
 * @Description 真实的对象
 **/

public class DigitalSellReal implements DigitalSell{

    @Override
    public void sell() {

        System.out.println("销售华为手机");
    }
}
public class Main {
    public static void main(String[] args) {

        //真实对象的行为
        DigitalSell realObj = new DigitalSellReal();
        realObj.sell();


        //代理对象的行为
        DigitalSell proxy = new DigitalSellProxy();
        proxy.sell();


    }
}
控制台输出——讲解代理设计模式,让代理帮你完成工作插图4
  • 优点
    • 可以在访问一个类时做一些控制,或增加功能
    • 操作代理类无须修改原本的源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
  • 缺点
    • 增加系统复杂性和调用链路
和装饰器模式的区别:
  • 代理模式主要是两个功能
    • 保护目标对象
    • 增强目标对象,和装饰模式类似了

发表评论 取消回复
表情 图片 链接 代码

分享