静态代理模式模式
静态代理模式是一个理解起来比较容易的设计模式
文章目录
一、静态代理角色
二、上代码
1.以租房子为例
代码如下(示例):
1.抽象租客与中介的关系
1.抽象租房子接口
public interface Rent {
public void rent();
}
2.新建房东实现这个租房子接口
//房东
public class Host implements Rent {
@Override
public void rent() {
System.out.println("房东要租房");
}
}
3.新建代理类模仿中介租房子
public class Proxy {
private Host host;
public Proxy(Host host) {
this.host = host;
}
public void rent(){
host.rent();
seeHouse();
fare();
}
public void seeHouse(){
System.out.println("看房");
}
public void fare(){
System.out.println("收中介费");
}
}
4.客户实际是面向代理类,也就是中介租房子,但是实际上还是调用房东的方法。
public class Client {
public static void main(String[] args) {
Host host = new Host();
host.rent();
//你不用面对房东直接找中介
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
2.下面用我们工程中的实例进行进一步的改进
1.注意了‘
1.抽象增删改
代码如下(示例):
public interface UserService {
void add();
void delete();
void edit();
void select();
}
2.实现类
//真实对象
public class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("增加一个用户");
}
@Override
public void delete() {
System.out.println("删除一个用户");
}
@Override
public void edit() {
System.out.println("编辑一个用户");
}
@Override
public void select() {
System.out.println("查询一个用户");
}
}
3.重头戏我想要在中间打log怎么办呢,这时候就需要一个代理类了
public class UserProxy implements UserService {
UserServiceImpl userService;
public UserServiceImpl getUserService() {
return userService;
}
public void setUserService(UserServiceImpl userService) {
this.userService = userService;
}
public void add() {
log("add");
userService.add();
}
public void delete() {
log("delete");
userService.delete();
}
public void edit() {
log("edit");
userService.edit();
}
public void select() {
log("select");
userService.select();
}
public void log(String msg){
System.out.println("使用了"+msg+"方法");
}
}
4.用户直接访问代理类
public class Client {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
UserProxy userProxy = new UserProxy();
userProxy.setUserService(userService);
userProxy.add();
}
}
总结
设计模式最终要的就是要分清角色下面上图