`
jimode2013
  • 浏览: 37710 次
社区版块
存档分类
最新评论

7 the Adapter and Facade Patterns Being Adaptive

阅读更多

The Adapter Pattern's role is to convert one interface into another.

The Adapter Pattern converts the interface of a class into another interface the clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.

This acts to decouple the client from the implemented interface,and if we expect the inerface to change over time,the adapter encapsulates that change so that the client doesn't have to be modified each time it needs to operate against a different interface.



 

 

The Adapter Pattern is full of good OO design principles:check out the use of object composition to wrap the adaptee with an altered interface.This approach has the added advantage that we can use an adapter with any subclass of the adaptee.

Also check out how the pattern binds the client to an interface,not an implementating;we could use several adapters,each converting a different backend set of classes.Or,we could add new implementations after the fact,as long as they adhere to the Target interface.

 

 

There are actually tow kinds of adapters:obect adapters and class adapters(multiple inheritance to implement it).

 

class adapters:



 The only difference is that with class adapter we subclass the Target and the Adaptee,while with object datpter we use composition to pass requests to an Adaptee.

Obect adapters and class adapters use tow different means of adapting the adaptee(composition versuse inheritance).



 

 

 

Obect Adapter

Because I use composition I've got a leg up.I can not only adapt an adaptee class,but any of its subclasses.(因为组合采用接口,比如构造器中传入的是接口,那么所有实现了这个接口的类都可以使用该适配器)

Class Adapter

That's true,I do have trouble with that because I am committed to one specific adaptee class,but I have a huge advantage because I don't have to reimplement my entire adaptee.I can also override the behavior of my adaptee if I need to because I'm just subclassing.(另一个问题是adaptee应该是一早就存在的,你要使用适配器模式,是因为突然发现你现有的实现不能适应adaptee)

Object Adapter

In my part of the world,we like to use composition over inheritance;you may be saving a few lines of code,but all I'm doing is writing a little code to delegate to the adaptee.We like to keep things flexible.

Class Adapter

Flexible maybe,efficient?No.Using a class adapter there is just one of me,not an adapter and an adaptee.

Object Adapter

You're worried about one little object?You might be able to quickly override a method,but any behavior I add to my adapter code works with my adaptee class and all its subclasses.

Class Adapter

Yeah,but what if a subclass of adaptee adds some new behavior.Then what?

Object Adapter

Hey,come on,cut me a break,I just need to compose with the subclass to make that work.

Class Adapter

Sounds messy....

Object Adapter

You wanna see messy?Look in the mirror!

 

 

 

when a Decorator is involved there's going to be some new responsibilities or behaviors added to your design.

 

 

 

 a pattern that alters an interface,but for a different reason:to simplify the interface.

It's aptly named the Facade Pattern because this pattern hides all the complexity of one or more classes behind a clean,well-lit facade.

 

Decorator Doesn't alter the interface,but adds responsibility.

Adapter    Converts one interface to another

Facade     Makes an interface simpler

 

 



 

 

 

 

  • 大小: 38.8 KB
  • 大小: 32.9 KB
  • 大小: 78.8 KB
  • 大小: 95.5 KB
  • 大小: 119.2 KB
分享到:
评论
Global site tag (gtag.js) - Google Analytics