1、几种关联模式的联系:
适配器模式:
将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。
外观模式:
提供了一个统一的接口,用来访问子系统的一群接口,外观定义了一个高层接口,让子系统更容易使用。实现了客户和子系统之间的松耦合
两者区别在于:
外观模式的意图是简化接口,而适配器的意图是将接口转换成不同接口。
当需要使用一个现有的类而其接口并不符合你的需要时,使用适配器;当需要简化并统一一个很大的接口或者一群负责的接口时,使用外观。
与装饰者区别:
适配器将一个对象包装起来以改变其接口,装饰者将一个对象包装起来以增加新的行为和责任。
2、实例:
旧的枚举器Enumeration(interface)包含如下元素:
hasMoreElements();
nextElement();
新的迭代器Iterator(interface)包含如下元素:
hasNext();
next();
remove();
面对旧的遗留代码,如果需要对接新的代码,这时就用到了适配器,实现代码如下:
public class EnumerationIterator implements Iterator { Enumeration enum; public EnumerationIterator(Enumeration enum) { this.enum = enum; } @Override public boolean hasNext() { return enum.hasMoreElements(); } @Override public Object next() { return enum.nextElement(); } @Override public void remove() { throw new UnsupportedOperationException(); } }
3、适配器或外观模式需要遵循 “最少知识”原则,实施方针如下:
就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
1)该对象本身;
2)被当做方法的参数而传递进来的对象;
3)此方法所创建或实例化的任何对象;
4)对象的任何组件(组件<==>被实例)
即:如果某对象是调用其他的方法的返回结果,不要调用该对象的方法。