我们在Android开发过程中,设计模式是经常被提起并被使用的,如果你作为一个Android开发者对设计模式非常的陌生,嗯,那么我觉得你离大牛的距离还有点远,那么什么是设计模式呢?其实很容易理解,当你开发项目的时候会出现大量重复工作,那么可能你遗忘掉了设计模式的好处,设计模式就是为了你写出高质量,易维护的代码而存在的。
OK!咱们废话不多说了,直接进入正题,这次我们先来说说Android设计模式中的工厂模式,至于什么是工厂模式,官方有很多的解释,我也不好拿它的来说事,之间简单点,说例子:公司有个项目需要用到定位,在讨论的时候有说使用百度的,有说使用高德的,那么到底用哪个,大家各执一词难分上下。最后CTO发话了,俩都用,哪个好用哪个。那么问题来了,他说了跟没说一样,问题还是回到到底用哪个?工厂模式派上用场了呗,我两个定位都给你写上,给你设置一个开关,想用哪个用哪个,用着百度不爽了,我就改个参数就可以用高德了,好了,代码就是下面的这种了:
public class test {
public static void main(String[] args) {
Location position= new LocationFactory().getInstance("xiaomi");
position.getPosition();
position.getCityName(10, 20);
}
}
class LocationFactory{
public static Location getInstance(String type){
if("baidu".equals(type)){
return new BaiduLocation();
}else {
return new GaodeLocation();
}
}
}
class BaiduLocation implements Location{
@Override
public void getPosition() {
// TODO Auto-generated method stub
System.out.println("通过百度定位获取到当前的经纬度是XXXXX");
}
@Override
public void getCityName(long lat, long lng) {
// TODO Auto-generated method stub
System.out.println("通过百度定位获取到当前的城市是XXXXX");
}
}
class GaodeLocation implements Location{
@Override
public void getPosition() {
// TODO Auto-generated method stub
System.out.println("通过高德定位获取到当前的经纬度是XXXXX");
}
@Override
public void getCityName(long lat, long lng) {
// TODO Auto-generated method stub
System.out.println("通过高德定位获取到当前的城市是XXXXX");
}
}
interface Loction{
public void getPosition();
public void getCityName(long lat,long lng);
}
上面的方法非常简单明了的阐述了工程模式的例子,LocationFactory就是一个工厂类,同个静态方法getInstance的参数返回不一样的定位类,定位类中实现了获取经纬度以及过经纬度获取定位信息的方法,调用他们就可以很简单是实现这两个方法,是不是很方便?如果你还想用其它的定位api你只需要构造一个方法,通过getInstance参数的改变就可以使用了,当然其他的方法和功能都是可以通过这个举一反三实现出来的。相信大家应该也弄明白了工厂模式了。那么你使用到了吗? 比如bitmap里面的bitmapfactory就是这样实现的。