工厂模式—选择器
2016-05-07 22:44
246 查看
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(); }
相关文章推荐
- Codeforces Beta Round #2 A map B dp C 模拟退火
- poj 3461 KMP模式串匹配
- 【2010集训队出题】小Z的袜子
- 从频率到意义:语义向量空间模型(4)(From Frequency to Meaning: Vector Space Models of Semantics)
- fts:路径 XXX 已在工作区 XXX;XXX 中映射
- 03-nginx负载均衡
- poj 1673 EXOCENTER OF A TRIANGLE(求三角形垂心)
- poj2752 扩展kmp
- 88. Merge Sorted Array
- 当我加载配置文件时报错:Call to undefined method CI_Config::config()
- 常用的Smali代码
- 如何提高服务器并发能力
- 四种最短路径算法对比
- 百度地图-设置默认城市
- http协议状态码对照表
- 第四百天 how can I 坚持
- leetcode 082 Remove Duplicates from Sorted List II
- 最小生成树【Kruskal】POJ2377,POJ1258,poj2358,hdu1233
- Android Assests目录遍历
- 各种排序算法(冒泡、选择、快排、插入、希尔、堆排、归并、计数、基数)