設計模式----抽象工廠模式


抽象工廠模式是工廠模式的泛化版。意思是抽象工廠模式能夠用來生產同一類別的一組產品。


之前的我們要生產iPhone手機和魅族手機。那現在我們既要生產iPhone手機和魅族手機,我們也要生產iPhone充電寶和魅族充電寶。


那現在在一個具體的工廠是可以生產同一品牌的手機和充電寶。

比iPhone工廠可以生產iPhone手機和iPhone充電寶。


簡言之,抽象工廠模式,就是爲了能生產同一等級的多種商品,下面的例子同一等級值得的同一個牌子。

下面我們用例子實現之

-------------------------------------------------------------------------------------------------------------------------------------------


//--------------抽象工廠------------------

package com.dp.abstractFactory;
/**
 * 抽象工廠,生產手機,充電寶
 * @author chendongj
 *
 */
public abstract class AbstractFactory {
public abstract Phone createPhone();
public abstract ChongDianBao createChongDianBao();


}


//------------抽象產品(手機)--------------------------

package com.dp.abstractFactory;


/**
 * 手機
 * @author chendongj
 *
 */
public abstract class Phone {

public void call(){
System.out.println("手機可以打電話!");

}
public   void   sendMessage(){
System.out.println("手機可以發短信!");

}
public   void   playVideo(){
System.out.println("手機可以播放視頻!");

}


}

//-----------抽象產品(充電寶)--------------------------

package com.dp.abstractFactory;


public abstract class ChongDianBao {
public void chongdian(){
System.out.print("充電寶給手機充電中...");
}


}

//------------具體的生產IPhone產品的工廠----------------------------

package com.dp.abstractFactory;
/**
 * 生產IPhone系列產品的具體工廠
 * @author chendongj
 *
 */
public class IphoneFactory  extends  AbstractFactory{
public  Phone createPhone(){
return new Iphone();
}
public  ChongDianBao createChongDianBao(){
 return new IphoneCDB();
}
}

//-------------具體的生產魅族產品的工廠-----------------------

package com.dp.abstractFactory;
/**
 * 生產魅族系列產品的具體工廠
 * @author chendongj
 *
 */
public class MeiZuFactory  extends AbstractFactory{
public  Phone  createPhone(){

return new MeiZuPhone();
}
   public ChongDianBao createChongDianBao(){
  return new MeiZuCDB();
  
   }


}

//------------具體的iPhone手機----------------

package com.dp.abstractFactory;


public class Iphone extends Phone {


public  void call(){
System.out.println("iPhone手機在打電話...");
}

    public void sendMessage(){
   
        System.out.println("iPhone在發短信...");
    }
    public void playVideo(){
    System.out.println("iPhone在播放視頻...");
    }
    
}

//----------具體的iPhone充電寶---------------------------

package com.dp.abstractFactory;
/**
 * iphone充電寶
 * @author chendongj
 *
 */
public class IphoneCDB  extends ChongDianBao{
public void chongdian(){
System.out.print("iPhone充電寶給iphone手機充電中...");
}


}


//-------------具體的魅族手機-------------------

package com.dp.abstractFactory;


public class MeiZuPhone extends Phone{
public  void call(){
System.out.println("魅族手機在打電話...");
}

    public void sendMessage(){
   
        System.out.println("魅族手機在發短信...");
    }
    public void playVideo(){
    System.out.println("魅族手機在播放視頻...");
    }


}

//--------具體的魅族充電寶----------------------------------

package com.dp.abstractFactory;
/**
 * 魅族充電寶
 * @author chendongj
 *
 */
public class MeiZuCDB  extends ChongDianBao{
public void chongdian(){
System.out.print("魅族充電寶給魅族手機充電中...");
}


}


//--------------測試類(開始生產,拿貨)----------

package com.dp.abstractFactory;


public class TestAbstractFactory {


/**
* 測試抽象工廠模式
*/
public static void main(String[] args) {
//生產iphone系列產品
IphoneFactory  iphoneFactory = new IphoneFactory();
Phone iphone  = iphoneFactory.createPhone();

iphone.call();
iphone.sendMessage();
iphone.playVideo();
ChongDianBao iphoneCDB= iphoneFactory.createChongDianBao();
iphoneCDB.chongdian();
System.out.println();
System.out.println("--------------------");
//生產魅族系列產品
MeiZuFactory   mzFactory = new MeiZuFactory();
Phone meizu = mzFactory.createPhone();
meizu.call();
meizu.sendMessage();
meizu.playVideo();
ChongDianBao  meizuCDB = mzFactory.createChongDianBao();
meizuCDB.chongdian();


}


}

//==============輸出結果=================================

iPhone手機在打電話...
iPhone在發短信...
iPhone在播放視頻...
iPhone充電寶給iphone手機充電中...
--------------------
魅族手機在打電話...
魅族手機在發短信...
魅族手機在播放視頻...
魅族充電寶給魅族手機充電中...




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章