天天看點

Android設計模式(一)工廠模式

我們在Android開發過程中,設計模式是經常被提起并被使用的,如果你作為一個Android開發者對設計模式非常的陌生,嗯,那麼我覺得你離大牛的距離還有點遠,那麼什麼是設計模式呢?其實很容易了解,當你開發項目的時候會出現大量重複工作,那麼可能你遺忘掉了設計模式的好處,設計模式就是為了你寫出高品質,易維護的代碼而存在的。

OK!咱們廢話不多說了,直接進入正題,這次我們先來說說Android設計模式中的工廠模式,至于什麼是工廠模式,官方有很多的解釋,我也不好拿它的來說事,之間簡單點,說例子:公司有個項目需要用到定位,在讨論的時候有說使用百度的,有說使用高德的,那麼到底用哪個,大家各執一詞難分上下。最後CTO發話了,倆都用,哪個好用哪個。那麼問題來了,他說了跟沒說一樣,問題還是回到到底用哪個?工廠模式派上用場了呗,我兩個定位都給你寫上,給你設定一個開關,想用哪個用哪個,用着百度不爽了,我就改個參數就可以用高德了,好了,代碼就是下面的這種了:

public class test {
       public static void main(String[] args) {
              Location position= new LocationFactory().getInstance("xiaomi");
              position.getPosition();
              position.getCityName(, );
       }
}

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就是這樣實作的。