代理模式和门面模式模式

本文探讨代理模式和门面模式的设计思想。代理模式通过中介对象扩展目标对象的功能,提供更丰富的操作;门面模式作为子系统的外观,简化了系统与外部的交互,实现了对子系统复杂性的封装。通过举例说明了两种模式在实际场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式和门面模式模式


1.引言

    看设计模式的时候看到代理模式,想起门面者模式,比较俩者,发现的不同之处,随便写写博客加深印象。


2.讲解

代理(Proxy)模式

所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。举一个例子:消费者一般在超时买东西,超市充当着代理的角色,而厂商充当着,目标对象。超市拥有规划商品,销售商品的功能,丰富了厂商生产商品的功能。就是说对目标对象的丰富和拓展。


image.png

消费者:

public class Consumer {

    private List<Product> productList=new ArrayList<>();

    //购买商品
    public void getProduct(Product product){
        productList.add(product);
    }

    public List<Product> getProductList() {
        return productList;
    }
}

生产商品IProduct接口

public interface IProduct {

    public Product product();
}

超市代理

public class SuperMarketProxy implements IProduct{

    private Manufacturer manufacturer;

    public SuperMarketProxy(Manufacturer manufacturer){
        this.manufacturer=manufacturer;
    }

    @Override
    public Product product() {
        return setPrice(manufacturer.product());
    }

    //g给商品标价,相当于拓展了目标对象的功能
    public Product setPrice(Product product){
        return product.setPrice(12d)
                .setName("商品1");
    }
}

生产商

public class Manufacturer implements IProduct {
    @Override
    public Product product() {
        return new Product();
    }
}
门面模式(Facade Pattern)

门面者也叫做外观模式,是一种比较常用的封装模式,其定义如下: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象。okhttpClient就是使用的门面者模式。okhttpClient包含了post,url等对象。门面者模式


image.png

子系统1

public class ModuleA {

   public void dealWithA(){
       System.out.print("A");
   }
}

子系统2

public class ModuleB {

    public void dealWithB (){
        System.out.print("B ");
    }
}

门面类

public class ModuleFacade {

    private ModuleA moduleA=new ModuleA();
    private ModuleB moduleB=new ModuleB();
    public void dealWith(int type){
        switch (type){
            case 0:
                moduleA.dealWithA();
                break;
            case 1:
                moduleB.dealWithB();
                break;
         
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值