工廠模式—選擇器

package com.MrZhou.Factory;

/*
 * 
 * 什麼是工廠模式?官方有很多解釋,我這裏把我所理解的結合經驗,
 * 詮釋給大家,我不想絞盡腦汁,抽象總結出類似於古文(JAVA編程思想)那樣難於理解的文字,
 * 也沒那個水平言簡意賅的、一針見血的總結出衆生都能看懂的解釋。只能笨鳥先飛、勤能補拙,
 * 從實踐出真知的角度出發,拋磚引玉,供大家思考。公司有個這樣一個需求,在App中要使用到LBS定位來實現某些功能。
 * 產品技術一大堆開始了需求、技術確認會,當大家討論到定位是用百度API來實現,還是用高德來實現。大家爭論不休,
 * 有人說百度定位不準,有人說高德定位不準,衆說紛紜。咋辦?最後,B總拍板,兩個一起用,哪個好用哪個,領導拍板了,
 * 但說了又等於沒說,咋辦?工廠模式這時候就呼之欲出了,我兩個都給你設計,代碼設個開關和參數,你說用高德不爽,
 * 我改個參數,就換百度,直到領導高興爲止,於是代碼就產生了
 * 
 * 
 * LocationFactory是一個工廠類,靜態函數getInstance的參數決定了是選用百度還是高德,
 * 這樣,對於調用者來說,只需要關心你是用百度還是高德即可。Location是一個接口,
 * 它抽象出高德和百度常用的函數調用。拿定位來說,基本上常用的就是根據經緯度查詢地址,
 * 或者定位當前所在位置獲取經緯度。當然可能還有更多有用的函數,我這裏就不在列舉。
 * 有了這樣一個共性的接口,XiaoMiLocation和BaiduLocation通過實現它的接口就能分別滿足調用者的需求。
 * 調用者就能夠任意通過改變參數,來實現來自不同定位API的需求。當然,如果百度和高德不爽,你完全可以使用谷歌API,
 * 只需要構造一個GoogleLocation類並實現Location接口的方法即可。
 * 
 */
class Demo_Factory {
	public static void main(String[] args) {
		String key = "gaode";
		getInstance(key).getLocation();
		getInstance(key).getLocationXY();
	}

	public static Location getInstance(String map) {
		if ("baidu".equals(map)) {
			return new baiduLocation();
		} else if ("gaode".equals(map)) {
			return new gaoDeLocation();
		}

		return null;

	}

}

class gaoDeLocation implements Location {

	@Override
	public void getLocation() {
		System.out.println("獲得了高德地圖的具體地址");
	}

	@Override
	public void getLocationXY() {
		System.out.println("獲得了高德地圖的具體定位XY");

	}

}

class baiduLocation implements Location {

	@Override
	public void getLocation() {
		System.out.println("獲得了百度地圖的具體地址");
	}

	@Override
	public void getLocationXY() {
		System.out.println("獲得了百度地圖的具體定位XY");
	}
}

interface Location {
	public void getLocation();

	public void getLocationXY();
}

發佈了33 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章