1.引言
看设计模式的时候看到代理模式,想起门面者模式,比较俩者,发现的不同之处,随便写写博客加深印象。
2.讲解
代理(Proxy)模式
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。举一个例子:消费者一般在超时买东西,超市充当着代理的角色,而厂商充当着,目标对象。超市拥有规划商品,销售商品的功能,丰富了厂商生产商品的功能。就是说对目标对象的丰富和拓展。
消费者:
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;}@Overridepublic Product product() {return setPrice(manufacturer.product());}public Product setPrice(Product product){return product.setPrice(12d).setName("商品1");}
}
生产商
public class Manufacturer implements IProduct {@Overridepublic Product product() {return new Product();}
}
门面模式(Facade Pattern)
门面者也叫做外观模式,是一种比较常用的封装模式,其定义如下: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象。okhttpClient就是使用的门面者模式。okhttpClient包含了post,url等对象。门面者模式
子系统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;}}
}