读书人

Adapter方式笔记

发布时间: 2012-11-09 10:18:48 作者: rapoo

Adapter模式笔记
名称:适配器, 转接器或包装器. ?想一想生活中常见的转接器, 我的手机原配的2.5MM耳机坏了, 有一个普通的3.5MM耳机插头大了, 用不了, 这时候我就需要一个转接器.这个转接器所做的事情就是接口的转换, 使得原本不兼容的两类东西可以一起工作.?如果这个转接器一头是3.5MM的插口, 一头是2.5MM的插头, 它就是一个对象适配器(对象组合的方法)如果这个转接器既有2.5MM/3.5MM的插口/插头, 也有2.5MM/3.5MM的插口/插头, 它可说是一个类适配器(多重继承的方法)?当你想使用一个已有的类, 而它的接口不符合你的需求, 那么用适配器吧当你想建立一个新的类, 它可以与其他接口协同工作, 虽然那些接口可能并不兼容你的类,用适配器吧当你想使用一些已有的类,?而它们实现了共同的接口,还是用适配器吧,注意是对象适配器噢?有的时候我们定义了一个接口, 可是呢, 大多数子类并不需要实现所有的方法, 这时我们可用一个抽象父类来适配这个接口比如java.awt.event .WindowAdapter, 它实现了WindowFocusListener , WindowListener , WindowStateListener , EventListener 如果要实现 WindowListener 接口,则您必须定义该接口内的所有方法。而此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法
Adapter有两种实现方式
1. 类适配器
Adapter方式笔记 2. 对象适配器

Adapter方式笔记 看GOF时就顺手写一个Stack Adapter的例子, java从1.1版本带来的Stack有不少缺点, 用List包装来实现Stack是个不错的选择, 应用Adapter模式, 可以很简单的做到,以下程序中, ClassStack为类适配器, ObjectStack为对象适配器
?

import java.util.LinkedList;import java.util.List;import static java.lang.System.*;/** * StackAdapter, a demo program of Adapter *  * @author:Walter Fan at http://wind007.iteye.com?* @version 1.0 10/28/2008 */public class StackAdapter {/** * @param args */public static void main(String[] args) {out.println("Adapter pattern demo:");Stack<Integer> stack1 = new ClassStack<Integer>();out.println("=== Class Adapter ===");for (int i = 0; i < 10; i++) {stack1.push(i);}out.println("=== Object Adapter ===");Stack<Integer> stack2 = new ClassStack<Integer>();for (int i = 0; i < 10; i++) {stack2.push(i);}out.println("Good Bye,\n-Walter Fan");}}interface Stack<T>{  void push(T data);  T pop();  T top();  int size();  void clear();  boolean isEmpty();} class ObjectStack<T> implements Stack<T> {    private LinkedList<T> myList =new LinkedList<T>() ;    public void push(T data) {        myList.addFirst(data);    }    public T top() {        return myList.getFirst();    }        public T pop() {        return myList.removeFirst();    }        public boolean isEmpty() {        return myList.isEmpty();    }        public void clear() {        myList.clear();    }        public int size() {    return myList.size();    }    }class ClassStack<T> extends LinkedList<T> implements Stack<T>, List<T> {private static final long serialVersionUID = 1L;public T top() {return getFirst();}}
????

读书人网 >其他相关

热点推荐