代理模式的本质是⼀个中间件,主要⽬的是解耦合服务提供者和使⽤者。使⽤者通过代理间接访问服务提供者,便于后者的封装和控制。是⼀种结构型设计模式。
Proxy
类,或CGLIB
动态代理代理模式应用场景
如Spring AOP
编程,通过动态代理实现切面编程(如事务管理、日志记录)。若目标类实现接口则用JDK代理,否则用CGLIB
应用程序中有两个不同接口的类进行通信,应用某个中间件来完成通信过程,中间件就是适配器。所谓适配器模式就是将⼀个类的接⼝,转换成客户期望的另⼀个接⼝。比如:插头转换器
分为两类:
以下是对象适配器的示例代码,将220V电压转为5V电压
// 目标接口,5V充电口
interface Target {
int get5V();
}
// 被适配的类,220V电源
class Adaptee220V {
public int get220V() {
return 220;
}
}
//对象适配器,通过组合实现
public class ObjectAdapter implements Target {
private Adaptee220V adaptee;
public ObjectAdapter(Adaptee220V adaptee) {
this.adaptee = adaptee;
}
@Override
public int get5V() {
return adaptee.get220V() / 44;
}
}
//客户端代码使用
public class AdapterDemo {
public static void main(String[] args) {
Target objectAdapter = new ObjectAdapter(new Adaptee220V());
System.out.println("对象适配器输出:" + objectAdapter.get5V());
}
}
装饰器模式主要对现有的类对象进⾏包裹和封装,以期望在不改变类对象及其类定义的情况下,为对象添加额外功能。是⼀种结构型模式。
核心角色有4类:
下面是开发一个权限校验装饰器的示例代码,根据不同接口动态添加权限校验
//核心接口
interface ApiHandler {
String handle(String request);
}
//具体API实现
class UserApiHandler implements ApiHandler {
@Override
public String handle(String request) {
return "User data";
}
}
//权限装饰器基类
abstract class AuthDecorator implements ApiHandler {
protected ApiHandler wrapped;
public AuthDecorator(ApiHandler wrapped) {
this.wrapped = wrapped;
}
public abstract String handle(String request);
}
//具体权限装饰器,管理员校验
public class AdminAuthDecorator extends AuthDecorator {
public AdminAuthDecorator(ApiHandler wrapped) {
super(wrapped);
}
@Override
public String handle(String request) {
if ("管理员".equals(request)) {
return "权限错误";
}
return wrapped.handle(request);
}
}
//客户端调用
ApiHandler handler = new AdminAuthDecorator(new UserApiHandler());
handler.handle(request);
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。