代理模式和门面模式模式
1.引言
看设计模式的时候看到代理模式,想起门面者模式,比较俩者,发现的不同之处,随便写写博客加深印象。
2.讲解
代理(Proxy)模式
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。举一个例子:消费者一般在超时买东西,超市充当着代理的角色,而厂商充当着,目标对象。超市拥有规划商品,销售商品的功能,丰富了厂商生产商品的功能。就是说对目标对象的丰富和拓展。
消费者:
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等对象。门面者模式
子系统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;
}
}
}