2012-09-06 9 views
39

Jakie są różnice między pełnomocnika, owijki lub klas elewacyjnychJakie są różnice między pełnomocnika, owijki lub klas elewacyjnych

Wszyscy wydają się być takie same dla mnie, biorą implementację, ująć go, a następnie metody są wywoływane w klasie otoki/proxy/elewacji, które wywołują metody enkapsulowanego obiektu.

Proszę pokazać, dlaczego są różne z przykładami.

Dzięki

+2

zobaczyć również http://stackoverflow.com/ pytania/350404/how-do-the-proxy-dekorator-adapter-i-wzory-most-różnią się – yegor256

+0

[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

Odpowiedz

38

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); 
    } 
} 
+0

Jak opisałbyś to podejście, gdyby nie korzystał z RPC, ponieważ w tej chwili jest to Proxy, ale wyobraź sobie, że jest to tylko hermetyzacja jednego obiektu z możliwością pozbycia się hermetyzowanego obiektu. http://stackoverflow.com/a/12259840/84539 – Jon

+0

Myślę, że prawdopodobnie nadal nazywam to proxy, ponieważ jest proxy dla zarządzania zasobami innego obiektu. Jak zasugerowałeś swoim pytaniem, nie są to trudne i szybkie zasady. Nie sądzę, że istnieje ogromna różnica w implementacji, ale jest jedna z intencji. –

+0

Jeśli Fasada współpracuje między obiektami, to co robi Mediator? Myślę, że Fasada po prostu opakowuje różne interfejsy i przekazuje żądanie klienta do poprawnego interfejsu. Popraw mnie, jeśli się mylę. – AKS

19

Wiele wzorce projektowe mają taką samą strukturę, jak widzieliście.

Różnica polega na przyczynie ich istnienia - , dlaczego ich istnienia.

Serwer proxy działa jako lokalny obiekt reprezentujący obiekt zdalny.

Owijarka służy do zawijania istniejącego obiektu w celu rozszerzenia/zmiany jego zachowania.

Elewacja ma za zadanie uprościć złożony interfejs API i zamiast tego wyświetlić prosty.

+0

Czy twoja definicja opakowania nie jest tutaj wzorcem dekoratora? – Jon

+0

@Jon - Jaka jest różnica? – Oded

+1

Nie wiem, dlatego zadałem pytanie – Jon

5

AFAIK Nie ma wzoru zwanego otoką. Wydaje się bardziej jak ogólna definicja jednego z wzorców zachowań.

Fasada

Nie owinąć jedną klasę, ale kilka. Celem jest ułatwienie pracy złożonego interfejsu API. NET przykładem jest klasa WebClient który wykorzystuje HttpWebRequest/HttpWebResponse

Proxy

proxy działa jako oryginalnego obiektu, ale zawiera dodatkową logikę, takie jak obsługa połączenia lub oczyszczania zasobów po zakończeniu.

Jeśli używasz WCF, możesz wygenerować proxy klienta, dostarczając interfejs usługi WCF.

Dodatkowe wzory

Istnieje kilka wzorów, które jest również "wrapper":

  • Adapter
  • Dekorator
+0

Co ze wzorem mostu? Czy to nie jest objęte typem "opakowania"? – TheSilverBullet

Powiązane problemy