代理类、包装类或外观类之间有什么不同
它们在我看来都是一样的,它们接受一个实现,封装它,然后在包装器/代理/门面类上调用方法,调用封装对象的方法.
请举例说明它们的不同之处.
谢谢
代理类、包装类或外观类之间有什么不同
它们在我看来都是一样的,它们接受一个实现,封装它,然后在包装器/代理/门面类上调用方法,调用封装对象的方法.
请举例说明它们的不同之处.
谢谢
不同之处主要在于意图不同.归根结底,它们都"接受并包装实现",但重要的是要传达不同之处.
包装器模式(也称为适配器模式)采用一个接口并使其适应另一个接口.
interface A { void Foo(); }
interface B { void Bar(); }
class AAdapter : B {
private A a;
public AAdapter(A a) { this.a = a; }
void Bar() {
a.Foo(); // just pretend foo and bar do the same thing
}
}
代理实现了一个接口,用于提供对其他内容(通常是大型内容)的访问.远程过程调用就是一个很好的例子.
interface PiCalculator {
double CalculatePi();
}
class Ec2PiCalculatorProxy : PiCalculator {
public double CalculatePi() {
// Fire up 10000 of computers in the cloud and calculate PI
}
}
我们称它为代理,而不是包装器,以传达它正在通过 tunel 传输到另一个组件以实现结果.我认为这与适配器模式不同,因为这是关于转换接口的.
façade的不同之处在于,它将多个类的协作隐藏在一个更简单的接口或类后面.
class Facade {
private A a;
private B b;
// Provides an interface to A and B by delegating to these members
public void DoSomethingWithAAndB() {
MagicToken x = a.DoSomethingAndGetAResult();
b.DoSomethingWithMagic(x);
}
}