代理模式和门面模式模式

代理模式和门面模式模式


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

发布了28 篇原创文章 · 获赞 50 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_21873747/article/details/79482508
今日推荐