设计模式--Iterator模式

假设场景:

A酒店: 要添加掌上app点菜功能.他提供的菜单是list.

B酒店:也要添加掌上app点菜功能,他提供的菜单是数组.

现在A,B同时都要求让Center来帮他们开app点菜.


对于Center来说 A和B只是提供的数据接口不同,没有必要为他们单独都开发一套app.那么怎么实现不同数据接口处理呢?答案就是Ite模式


A酒店菜:

public class MenuA {

	private List<String> items = null;
	public MenuA() {
		items = new ArrayList<String>();
		items.add("aaaa==>1");
		items.add("aaaa==>2");
		items.add("aaaa==>3");
	}
	public List<String> getItems() {
		return items;
	}
}
B酒店:

public class MenuB {
	private String[] items = null;
	public MenuB() {
		items = new String[3];
		items[0] = "bbbb==>1";
		items[1] = "bbbb==>2";
		items[2] = "bbbb==>3";
	}
	public String[] getItems() {
		return items;
	}
}

Center 菜单接口:

public interface CenterMenu {
	public Iterator<String> getMenu();
}
Center对A酒店的适配:

public class CenterMenuA implements CenterMenu {
	private Iterator<String> ite;
	public CenterMenuA(List<String> menus) {
		this.ite = menus.iterator();
	}
	public Iterator<String> getMenu() {
		return ite;
	}
}

Center对B酒店的适配:

public class CenterMenuB implements Iterator<String>, CenterMenu {
	String[] items;
	int position = 0;
	public CenterMenuB(String[] is) {
		this.items = is;
	}
	public boolean hasNext() {
		try {
			if (items[position] != null) {
				return true;
			}
			return false;
		} catch (Exception e) {
			return false;
		}
	}

	public String next() {
		return items[position++];
	}

	public void remove() {

	}

	public Iterator<String> getMenu() {
		return this;
	}

}
测试结果:
public class AppTest extends TestCase {
	public void testApp() {
		CenterMenu menuA = new CenterMenuA((new MenuA()).getItems());
		CenterMenu menuB = new CenterMenuB((new MenuB()).getItems());

		print("menuA", menuA);
		print("menuB", menuB);
	}

	private void print(String title, CenterMenu menu) {
		System.out.println(title);
		while (menu.getMenu().hasNext()) {
			String next = menu.getMenu().next();
			System.out.println(next);
		}
	}
}
结果显示

menuA
aaaa==>1
aaaa==>2
aaaa==>3
menuB
bbbb==>1
bbbb==>2
bbbb==>3

这例子中,还体现了适配器模式.可以这样理解: A是双口插头,B是三口插头   经过适配成四口插头(^_^ 现实应该没有,只为举例子*_*)插入center的插座中

例子源码svn:http://design-iterate.googlecode.com/svn/trunk/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值