前言:
在解說工廠模式之前,先嘮一嘮。
在莫蘭蒂颱風第五天後,廈門市民的生活終於基本恢復正常,然而給廈門帶來的傷害,仍在延續(35萬棵樹受災,廈門行)
上一次說要做的一件事,終於是去做了(9月16日申請了個微信公衆號,發了篇文章號召大家救樹,鏈接如下)
http://mp.weixin.qq.com/s?__biz=MzI3NzQ2NTIxMQ==&mid=2247483662&idx=1&sn=322db17aac12e1bdb5d9685f918fb32f&scene=0#wechat_redirect
OK,以下是正題
工廠模式,屬於設計模式中的創建類型,見名知意,就如同工廠的產品一樣,將共性抽象出來成一個產品父類,各子類繼承(或實現)父類,在需要創建一個具體的子類產品時,並不直接通過new的方式,而是構造一個Factory工廠類,由傳入的產品要求(參數)去創建具體的產品子類。
開始代碼:
今天的例子是以手機爲例
所以,主要的java類就是,PhoneFactory類(工廠),Phone類(父類),以及子類(ApplePhone/SamsungPhone/XiaomiPhone);
首先是創建一個工廠類 , 主要的方法是CreatePhone
//手機工廠類
public class PhoneFactory {
// 定義手機類型
public static final String Phone_Apple = "Apple";
public static final String Phone_Samsung = "Sumsang";
public static final String Phone_Xiaomi = "Xiaomi";
// 根據不同的手機類型做判斷,生產不同的手機
public static Phone CreatPhone(String phone_type) {
switch (phone_type) {
case Phone_Apple:
return new ApplePhone();
case Phone_Samsung:
return new SamsungPhone();
case Phone_Xiaomi:
return new XiaomiPhone();
default:
System.out.println("我們工廠不生產這種手機型號");
return null;
}
}
}
其次是具有產品共性的,手機父類Phone
可以是抽象類,也可以是一個接口,定義行爲就好(這裏的行爲是,開機、功能、關機)
//抽象父類,默認統一了開機和關機的行爲,子類繼承這兩個行爲
public abstract class Phone {
public void open() {
System.out.println("開機,準備幹活");
}
public abstract void function();
public void close() {
System.out.println("收工,關機了");
}
}
最後是產品子類(這裏構造了三類產品),蘋果手機、三星手機、小米手機
//蘋果手機
public class ApplePhone extends Phone {
@Override
public void function() {
System.out.println("蘋果手機,我的特色功能是IPHONE7防水");
}
}
//三星手機
public class SamsungPhone extends Phone {
@Override
public void function() {
System.out.println("三星手機,我的特色功能是Note7爆炸");
}
}
//小米手機
public class XiaomiPhone extends Phone{
@Override
public void function() {
System.out.println("小米手機,我的特色功能是MIUI8手機分身");
}
}
這樣,一個工廠,以及產品線就定義好了。
來測試一下吧
//測試類
public class Test {
public static void main(String[] args) {
Phone phone1 = PhoneFactory.CreatPhone("Apple");
Phone phone2 = PhoneFactory.CreatPhone("Samsung");
Phone phone3 = PhoneFactory.CreatPhone("Xiaomi");
phone1.open();
phone1.function();
phone1.close();
phone2.open();
phone2.function();
phone2.close();
phone3.open();
phone3.function();
phone3.close();
}
}
通過工廠創建了三個phone,傳入的參數分別是“Apple”、“Samsung” 、”Xiaomi”,
控制檯輸出結果如下
開機,準備幹活
蘋果手機,我的特色功能是IPHONE7防水
收工,關機了
開機,準備幹活
三星手機,我的特色功能是Note7爆炸
收工,關機了
開機,準備幹活
小米手機,我的特色功能是MIUI8手機分身
收工,關機了
Ok ,簡單工廠模式到此爲止。
工廠模式還有抽象工廠模式等,不僅僅侷限於一類產品,可以構造出不同的產品系列,小夥伴們可以再去挖掘鞏固哦