代理模式(Proxy Pattern)
代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
编程思想:在修改前人写过的项目是,不要直接修改代码而是通过代理的方式来扩展该方法。
举个栗子:明星都有个叫代理律师的人,万一擦枪走火,那么有关法律的事情都要通过代理律师这个中介来解决,有什么事情跟我代理律师说。
组成:
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
开始编码:
package com.winter.Util.june.DesignPattern.ProxyPattern;
/**
* 接口(抽象角色)
*/
public interface BaseDAO {
void save();
}
package com.winter.Util.june.DesignPattern.ProxyPattern;
/**
* 目标对象(真实角色)
*/
public class UserDAO implements BaseDAO {
public void save(){
System.out.println("保存数据");
};
}
package com.winter.Util.june.DesignPattern.ProxyPattern;
/**
* 代理对象(代理角色)
*/
public class UserDAOImpl implements BaseDAO {
//目标对象并向上转型
private BaseDAO baseDAO;
public UserDAOImpl(BaseDAO baseDAO){
this.baseDAO=baseDAO;
}
@Override
public void save() {
System.out.println("开始事务...");
baseDAO.save();//执行目标对象的方法
System.out.println("提交事务...");
}
}
package com.winter.Util.june.DesignPattern.ProxyPattern;
/**
* 测试类
*/
public class TestProxyPattern {
public static void main(String args[]){
//新建目标对象
UserDAO target=new UserDAO();
//将目标对象传递给代理对象,并建立代理关系
UserDAOImpl userDAOImpl=new UserDAOImpl(target);
userDAOImpl.save();
}
}
这是结尾。。。