浅淡代理模式以及其适用性
1.什么是代理模式?
其实代理这个东西就源自于生活,好比你要去买个电脑,你不可能到厂商那去买,不仅不方便,而且麻烦,这时候就有许多的代理商,在代理商你不仅可以买到你所需的产品,同时还可以享受附加产品,比如售后,风险保障以及赠品等等。这样相当于代理商衍生了附加的东东。
JAVA中的代理模式:
我们仍以买东西这个模型来
public class Company {public void sale(){System.out.println("SALE PRODUCT ONLY");}}
public abstract class BaseSale {public abstract void sale();}
public class Company extends BaseSale{public void sale(){System.out.println("SALE PRODUCT ONLY");}}
public class Retail extends BaseSale{private BaseSale baseSale;public Retail(BaseSale baseSale){this.baseSale = baseSale;}public void saleAdd_On(){System.out.println("sale Add-On");}@Overridepublic void sale() { baseSale.sale(); this.saleAdd_On();}}
public class Buy {public static void main(String[] args) {Company company = new Company();BaseSale baseSale = new Retail(company);baseSale.sale();}}
List<BaseSale> list = getBaseSaleList();BaseSale baseSale = new Retail(list);baseSale.sale();
public abstract class BaseBO { public abstract boolean update(BaseDO baseDO);public abstract boolean add(BaseDO baseDO);}
public class StaffBO extends BaseBO { public boolean add(BaseDO baseDO) { // add baseDO ..}@Overridepublic boolean update(BaseDO baseDO) { // update baseDO..}
public class BaseProxyProcess extends BaseBO {private BaseBO boEntity;private BaseDO baseDO; // 构造public BaseProxyProcess(BaseBO boEntity, BaseDO baseDO) {this.boEntity = boEntity;this.baseDO = baseDO;} private BaseDO BeforeUpdate(BaseDO baseDO) { // update前预处理}private BaseDO BeforeAdd(BaseDO baseDO){ // add 前预处理} @Overridepublic boolean add(BaseDO baseDO) { //代理add 事件 return boEntity.add(this.BeforeAdd(baseDO));}@Overridepublic boolean update(BaseDO baseDO) { // 代理update 事件 return boEntity.update(this.BeforeUpdate(baseDO));}
public class StaffAO { private StaffBO staffBO;public ResultWrapper createStaff(Staff staff){ //通过构造方法将欲被代理类实体(staffBO)传入并进行代理 proxy = new BaseProxyProcess(staffBO, staff); proxy.add(staff));// //....}public ResultWrapper updateStaff(Staff staff){ proxy = new BaseProxyProcess(staffBO ,staff); proxy.update(staff); //....}