Różnica polega głównie na zamiarach. W końcu wszyscy "wykonują implementację i ją zawijają", ale ważne jest, aby przekazać różnicę.
Wzór opakowania (czyli wzór adaptera) zajmuje jeden interfejs i dostosowuje go do drugiego.
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
}
}
Serwer proxy implementuje interfejs w celu zapewnienia dostępu do czegoś innego (zwykle coś dużego). Dobrym przykładem są zdalne wywołania procedur.
interface PiCalculator {
double CalculatePi();
}
class Ec2PiCalculatorProxy : PiCalculator {
public double CalculatePi() {
// Fire up 10000 of computers in the cloud and calculate PI
}
}
Nazywamy to proxy, a nie opakowanie, aby poinformować, że przechodzi przez tunel do innego komponentu, aby wypełnić wyniki. Nie widzę tego samego, co wzorzec adaptera, ponieważ chodzi o konwersję interfejsów.
Fasada różni się, ponieważ ukrywa współpracę wielu klas za prostszym interfejsem lub klasą.
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);
}
}
zobaczyć również http://stackoverflow.com/ pytania/350404/how-do-the-proxy-dekorator-adapter-i-wzory-most-różnią się – yegor256
[Różnica między adapterem a Wr apper] (http://www.thecodedself.com/The-Difference-Between-an-Adapter-and-a-Wrapper/) i [Design Patterns - Adapters and Wrappers] (http://weblogs.foxite.com/ andykramek/2007/01/07/design-patterns-adapters-and-wrapper// – Curiousity