工厂模式—选择器

本文介绍了一个具体的工厂模式应用场景,即根据不同需求选择不同的地图定位服务。通过一个简单的Java示例,展示了如何灵活切换百度和高德定位API。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值