三種工廠模式

簡單工廠模式

  • 優(yōu):客戶端避免創(chuàng)建產(chǎn)品對象,而只是使用產(chǎn)品半开。
  • 劣:產(chǎn)品需要符合開閉原則(對修改封閉隔披,對拓展開放),簡單工廠并不符合開閉原則寂拆。只有一個工廠類角色奢米,當產(chǎn)品是多層次樹狀結(jié)構(gòu)抓韩,工廠類不方便維護。
//抽象產(chǎn)品角色
interface Car {
    void drive();
}
// 具體產(chǎn)品角色
class Benz implements Car {
    public void drive() {
        System.out.println("Car Benz is starting");
    }
}
class Bmw implements Car {
    public void drive() {
        System.out.println("Car Bmw is starting");
    }
}
// 工廠類角色
class Driver {
    public static Car driverCar(String string) throws Exception {
        if (string.equalsIgnoreCase("Benz")) {
            return new Benz();
        } else if (string.equalsIgnoreCase("Bmw")) {
            return new Bmw();
        } else {
            throw new Exception();
        }
    }

}
public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            Car car = Driver.driverCar("Benz");
            car.drive();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
            
    }

工廠方法模式

  • 優(yōu):產(chǎn)品和工廠都符合開閉原則
  • 劣:當產(chǎn)品種類多的時候鬓长,工廠對象也會相應(yīng)的增加谒拴。
//抽象工廠角色
interface Driver{
   Car driverCar();
}
// 工廠類角色
class BenzDriver implements Driver{
  public Car driverCar(){
      return new Benz();
  }
}
class BmwDriver implements Driver{
  public Car driverCar(){
      return new Bmw();
  }
}
//使用者
public static void main(String[] args) {
      // TODO Auto-generated method stub
      try {
          Driver driver = new BenzDriver();
          Car car = driver.driverCar();
          car.drive();
      } catch (Exception e) {
          // TODO: handle exception
          e.printStackTrace();
      }
          
  }

抽象工廠模式(對對象進行抽象)

  • 優(yōu):抽象工廠模式可以面對多個產(chǎn)品等級結(jié)構(gòu)。所有的具體工廠都實現(xiàn)了抽象工廠中定義的那些公共接口涉波,改變具體工廠的實例英上,就可以在某種程度上改變整個軟件系統(tǒng)的行為。
  • 劣:增加新的產(chǎn)品等級結(jié)構(gòu)很復(fù)雜啤覆,需要修改抽象工廠和所有的具體工廠類苍日,對“開閉原則”的支持呈現(xiàn)傾斜性。
//抽象工廠
public abstract class AbstractFactory {
       public abstract Car getCar(String car);
       public abstract Tire getTire(String tire);
}
/*****************************/
//抽象產(chǎn)品 輪胎
public interface Tire {
   void train();
}
//抽象產(chǎn)品
public interface Car {
   void drive();
}
/*****************************/
//實體類 子午線輪胎
public class RadialTire implements Tire {
   @Override
   public void train() {
       // TODO: 2019-08-19
   }
}
//實體類 防滑輪胎
public class AntiskidTire implements Tire {
   @Override
   public void train() {
       // TODO: 2019-08-19  
   }
}
/*****************************/
//創(chuàng)建實現(xiàn)接口的實體類
public class Benz implements Car {
   @Override
   public void drive() {
           //todo Benz created
   }
}
//創(chuàng)建實現(xiàn)接口的實體類
public class Audi implements Car {
   @Override
   public void drive() {
       //todo Audi created
   }
}
/*****************************/
//創(chuàng)建一個工廠創(chuàng)造器
public class FactoryProducer {
   public static AbstractFactory getFactory(String choice) {
       if (choice.equalsIgnoreCase("CAR")) {
           return new CarFactory();
       } else if (choice.equalsIgnoreCase("TIRE")) {
           return new TireFactory();
       }
       return null;
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窗声,一起剝皮案震驚了整個濱河市相恃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笨觅,老刑警劉巖拦耐,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異见剩,居然都是意外死亡杀糯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門炮温,熙熙樓的掌柜王于貴愁眉苦臉地迎上來火脉,“玉大人,你說我怎么就攤上這事柒啤【牍遥” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵担巩,是天一觀的道長方援。 經(jīng)常有香客問我,道長涛癌,這世上最難降的妖魔是什么犯戏? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拳话,結(jié)果婚禮上先匪,老公的妹妹穿的比我還像新娘。我一直安慰自己弃衍,他們只是感情好呀非,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般岸裙。 火紅的嫁衣襯著肌膚如雪猖败。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天降允,我揣著相機與錄音恩闻,去河邊找鬼。 笑死剧董,一個胖子當著我的面吹牛幢尚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翅楼,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侠草,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了犁嗅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤晤碘,失蹤者是張志新(化名)和其女友劉穎褂微,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體园爷,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡宠蚂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了童社。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片求厕。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扰楼,靈堂內(nèi)的尸體忽然破棺而出呀癣,到底是詐尸還是另有隱情,我是刑警寧澤弦赖,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布项栏,位于F島的核電站,受9級特大地震影響蹬竖,放射性物質(zhì)發(fā)生泄漏沼沈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一币厕、第九天 我趴在偏房一處隱蔽的房頂上張望列另。 院中可真熱鬧,春花似錦旦装、人聲如沸页衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拷姿。三九已至惭载,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間响巢,已是汗流浹背描滔。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踪古,地道東北人含长。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像伏穆,于是被迫代替她去往敵國和親拘泞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容