手机Android设计模式 --工厂模式

发布时间:2017-04-12

工厂模式:

       工厂方法模式的特点是:

       一个抽象产品类(或接口),派生(或实现)多个真实产品类

       一个抽象工厂类(或接口),派生(或实现)多个真实工厂类

       一般来说标准的工厂方法模式需要一个工厂只生产一种产品,那么当产品种类特别多的时候工厂的数量就特别多,所以通常会使用一些工厂方法模式的变种.

       标准工厂方法模式:

       首先先介绍一下标准的工厂方法模式,不带任何的变种.以工厂生产不同操作系统的手机为例.

       建立一个产品接口,提供一个获取系统信息的方法.

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 XiaoMiLocation();
              }
       }
}
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 XiaoMiLocation 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 Location{
       public void getPosition();
       public void getCityName(long lat,long lng);
}

上面的例子,较好的阐述了工厂模式的概念。LocationFactory是一个工厂类,静态函数getInstance的参数决定了是选用百度还是高德,这样,对于调用者来说,只需要关心你是用百度还是高德即可。Location是一个接口,它抽象出高德和百度常用的函数调用。拿定位来说,基本上常用的就是根据经纬度查询地址,或者定位当前所在位置获取经纬度。当然可能还有更多有用的函数,我这里就不在列举。有了这样一个共性的接口,XiaoMiLocation和BaiduLocation通过实现它的接口就能分别满足调用者的需求。调用者就能够任意通过改变参数,来实现来自不同定位API的需求。可以使用谷歌API,只需要构造一个GoogleLocation类并实现Location接口的方法即可。
       工厂模式的应用非常广泛,比如android的bitmap中常用的BitmapFactory类,创建Bitmap对象,通常使用静态工厂方法。