简介
设计模式中很多模式及其相像,本文记录一些常见的,易混淆的设计模式,对他们的目的、作用进行比较,以便更好的理解设计模式。
适配器模式、代理模式
代码及其相似,都是将原本的类包装在新的一个类里面。
类结构:
- 适配器:
Adaptee
和Target
没有关系,接口方法也完全不同。 - 代理:
NetProxy
和OutNet
是继承或兄弟关系,接口方法一致。
场景:
- 适配器:一般发生在外来代码(各种第三方),要适应现有环境。
- 代理:自己开发的功能,需要进行增强。比如:AOP
目的
- 适配器:更多的是为了适配,为了转变,将原本不适用的接口、方法封装成适应现有框架的接口、方法。
- 代理:接口本身是适用的,但是需要增强,将现有框架的变成更强的。
// adaptee 为了能在体系中使用,只能在外面包一层 ObjectAdapter
// 原方法 adapteeRequest 被封装为 request
// 封装的目的是转换,而不是加强!
public class ObjectAdapter implements Target{
public Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee) { this.adaptee = adaptee; }
public void request(){
System.out.println("ObjectAdapter request begin");
adaptee.adapteeRequest();
}
}
// 代理的原因 更多是增加,而不是转换,原本的类也是能对接的。
public class NetProxy implements BaseNet{
public OutNet outnet;
@override
public void visit(){
//通过真实对象,实现访问
if (outnet==null){
outnet = new OutNet();
}
outnet.visit();
}
}