生活随笔
收集整理的這篇文章主要介紹了
设计模式1-工厂模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一章 設計模式入門之工廠模式的使用
工廠模式可以分為三類: 簡單工廠模式(Simple Factory) 工廠方法模式(Factory Method) 抽象工廠模式(Abstract Factory) 注:簡單工廠不屬于23種設計模式里
文章目錄 第一章 設計模式入門之工廠模式的使用 前言 一、簡單工廠模式 二、工廠方法模式 三、抽象方法模式 總結
前言
創建型模式:創建型模式(Creational Pattern)對類的實例化過程進行了抽象,能夠將軟件模塊中對象的創建和對象的使用分離。為了使軟件的結構更加清晰,外界對于這些對象只需要知道它們共同的接口,而不清楚其具體的實現細節,使整個系統的設計更加符合單一職責原則。創建型模式在創建什么(What),由誰創建(Who),何時創建(When)等方面都為軟件設計者提供了盡可能大的靈活性。創建型模式隱藏了類的實例的創建細節,通過隱藏對象如何被創建和組合在一起達到使整個系統獨立的目的。工廠模式是創建型模式中比較重要的。工廠模式的主要功能就是幫助我們實例化對象。之所以名字中包含工廠模式四個字,是因為對象的實例化過程是通過工廠實現的,是用工廠代替new操作的。
一、簡單工廠模式
使用手機產品類講解
Phone類,手機產品類
public interface Phone { void make ( ) ;
}
MiPhone類,生產小米手機
public class MiPhone implements Phone { @Override public void make ( ) { System
. out
. println ( "生產小米手機" ) ; }
}
IPhone類,生產蘋果手機
public class IPhone implements Phone { @Override public void make ( ) { System
. out
. println ( "生產蘋果手機" ) ; }
}
PhoneFactory 類,手機工廠類,負責加工各種手機
public class PhoneFactory { public static Phone
make ( String name
) { if ( "Mi" . equals ( name
) ) { return new MiPhone ( ) ; } else if ( "IPhone" . equals ( name
) ) { return new IPhone ( ) ; } return null
; } }
簡單調用
public class DemoTest { public static void main ( String
[ ] args
) { System
. out
. println ( "----------------------簡單工廠------------------------------------" ) ; Phone mi
= PhoneFactory
. make ( "Mi" ) ; mi
. make ( ) ; Phone iPhone
= PhoneFactory
. make ( "IPhone" ) ; iPhone
. make ( ) ; }
工廠模式的角色:
工廠角色 :如PhoneFactory ,負責生產具體的對象; 抽象產品:如Phone,描述所有實例的公共接口; 具體產品:如Iphone和MiPhone,實現抽象產品的接口,是工廠角色中要創建的具體實例。 優點:使用簡單工廠的客戶端只需傳入對應的參數,不需要關心創建對象的邏輯。 缺點:違反了“開閉原則”,及對擴展開放,修改關閉,如果增加新的產品需要修改工廠代碼。
二、工廠方法模式
Factory接口,工廠接口
public interface Factory { Phone
make ( ) ;
}
IPhoneFactory類,蘋果手機工廠類
public class IPhoneFactory implements Factory { @Override public Phone
make ( ) { return new IPhone ( ) ; }
}
MiPhoneFactory類,小米手機類
public class MiPhoneFactory implements Factory { @Override public Phone
make ( ) { return new MiPhone ( ) ; } }
測試
public class DemoTest { public static void main ( String
[ ] args
) { System
. out
. println ( "----------------------工廠方法------------------------------------" ) ; IPhoneFactory iPhoneFactory
= new IPhoneFactory ( ) ; iPhoneFactory
. make ( ) . make ( ) ; MiPhoneFactory miPhoneFactory
= new MiPhoneFactory ( ) ; miPhoneFactory
. make ( ) . make ( ) ; } }
工廠方法模式而言,是通過擴展來新增具體類的,符合開閉原則,但是在客戶端就必須要感知到具體的工廠類,也就是將判斷邏輯由簡單工廠的工廠類挪到客戶端。 使用場景:日志記錄器;數據庫訪問;
三、抽象方法模式
場景分析:工廠方法中,每個工廠只負責生產某一類產品,如果增加新的產品將會增加大量的工廠類,這時候考慮到將相關的產品組成一個產品族,由一個工廠統一生產。
抽象產品
public interface Pc { void make ( ) ;
}
public interface Phone { void make ( ) ;
}
具體產品
public class IPhone implements Phone { @Override public void make ( ) { System
. out
. println ( "生產蘋果手機" ) ; }
}
public class MiPhone implements Phone { @Override public void make ( ) { System
. out
. println ( "生產小米手機" ) ; }
} public class Mac implements Pc { @Override public void make ( ) { System
. out
. println ( "生產蘋果平板" ) ; }
}
public class MiPc implements Pc { @Override public void make ( ) { System
. out
. println ( "生產小米pc" ) ; }
}
抽象工廠
public interface Factory { Phone
make ( ) ; Pc
makePc ( ) ;
}
具體工廠
public class IPhoneFactory implements Factory { @Override public Phone
make ( ) { return new IPhone ( ) ; } @Override public Pc
makePc ( ) { return new Mac ( ) ; }
} public class MiPhoneFactory implements Factory { @Override public Phone
make ( ) { return new MiPhone ( ) ; } @Override public Pc
makePc ( ) { return new MiPc ( ) ; }
}
測試
public class DemoTest { public static void main ( String
[ ] args
) { System
. out
. println ( "----------------------抽象工廠------------------------------------" ) ; IPhoneFactory iPhoneFactory1
= new IPhoneFactory ( ) ; iPhoneFactory1
. make ( ) . make ( ) ; iPhoneFactory1
. makePc ( ) . make ( ) ; MiPhoneFactory miPhoneFactory1
= new MiPhoneFactory ( ) ; miPhoneFactory1
. make ( ) . make ( ) ; miPhoneFactory1
. makePc ( ) . make ( ) ; }
}
在抽象工廠模式中,增加新的產品族很方便,但是增加新的產品等級結構很麻煩
總結
工廠方法模式: 一個抽象產品類,可以派生出多個具體產品類。 一個抽象工廠類,可以派生出多個具體工廠類。 每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式: 多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。 一個抽象工廠類,可以派生出多個具體工廠類。 每個具體工廠類可以創建多個具體產品類的實例,也就是創建的是一個產品線下的多個產品。
區別: 工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。 工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
總結
以上是生活随笔 為你收集整理的设计模式1-工厂模式 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。