What are the differences between proxy, wrapper or a façade classes

前端 未结 3 1140
野的像风
野的像风 2021-01-30 03:05

What are the differences between proxy, wrapper or a façade classes

They all seem to be the same to me, they take an implementation, encapsulate it and then methods are

3条回答
  •  梦谈多话
    2021-01-30 03:44

    The difference is mostly in the intent. Ultimately, they all do "take an implementation and wrap it", but it's important to communicate the difference.

    The wrapper pattern (aka the adapter pattern) takes one interface and adapts it to the other.

    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
       } 
    }
    

    A proxy implements an interface for the purpose of providing access to something else (usually something big). A good example is remote procedure calls.

    interface PiCalculator {
        double CalculatePi();
    }
    
    class Ec2PiCalculatorProxy : PiCalculator {
        public double CalculatePi() {
           // Fire up 10000 of computers in the cloud and calculate PI
        }
    }
    

    We call it a proxy rather than a wrapper to communicate that it's tunnelling through to another component to fulfil the results. I don't see this the same as the adapter pattern, because that's about converting interfaces.

    A façade differs because it hides the collaboration of multiple classes behind a simpler interface or class.

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

提交回复
热议问题