您的位置:首页 > 其它

工厂模式—选择器

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: