代理模式和门面模式模式

1.引言

看书的时候看到代理模式,让我想起门面者模式,不由自主的比较俩者,故再次写写加深印象。

2.正题

代理(Proxy)模式

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


image.png

消费者:

public class Consumer {

    private List productList=new ArrayList<>();

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

    public List 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;
         
        }
    }
}

中介者模式

中介者模式在生活中非常常见。那就是房地产中介公司。传统的买房,卖房是这样样子的。

image.png

现在呢 加入了,中介者之后上图就变成这样

image.png

世界贸易组织就类似于 中介者模式。调停贸易国的冲突,制定规则规矩

你可能感兴趣的:(代理模式和门面模式模式)