`
linsea
  • 浏览: 87950 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

适配器模式

阅读更多
package desginpattern.adapter.ducks;
/*
 * 适配器模式定义:
 * 将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间.
 *
 * NOTES:
 * 适配器有两种:对象适配器和类适配器,分别使用组合和继承两种方式实现,
 * 类适配器须同时继承被适配者(adaptee)和目标类(target).
 * 此方式只适合于支持多重继承的语言,JAVA并不被支持.
 * 
 * 此类为适配器模式核心类,需要实现被适配者的接口.
 * 火鸡(适配者)要装鸭子(被适配者)当然要会鸭子的方法.
 */
public class TurkeyAdapter implements Duck {
//火鸡要扮鸭子,须持有一个(火鸡)适配者的引用,骨子里还是要(火鸡)适配者自己做事.
	Turkey turkey;
 
	public TurkeyAdapter(Turkey turkey) {
		this.turkey = turkey;
	}
    
	public void quack() {
		turkey.gobble();//归根到底还是要(火鸡)适配者自己动手做事.
	}
  
	public void fly() {
		for(int i=0; i < 5; i++) {
			turkey.fly();
		}
	}
}



package desginpattern.adapter.iternum;

import java.util.*;
/**
 * enumeration(适配者) 到 Iterator(被适配者) 的适配器类
 */
public class EnumerationIterator implements Iterator {
	Enumeration enumeration;
 
	public EnumerationIterator(Enumeration enumeration) {
		this.enumeration = enumeration;
	}
 
	public boolean hasNext() {
		return enumeration.hasMoreElements();
	}
 
	public Object next() {
		return enumeration.nextElement();
	}
 
	public void remove() {
		throw new UnsupportedOperationException();
	}
}




package desginpattern.adapter.iternum;

import java.util.*;
/**
 * 测试类
 */
public class EnumerationIteratorTestDrive {
	public static void main (String args[]) {
		Vector v = new Vector(Arrays.asList(args));
		
		//new一个EnumerationIterator适配器,
		//把一个Enumeration类型(适配者)作为参数传进去,
		//最后返回一个iterator(被适配者)类型.
		Iterator iterator = new EnumerationIterator(v.elements());
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics