工廠模式

工廠模式


意義

  1. 將創(chuàng)建者和調(diào)用者進行分離,創(chuàng)建過程細(xì)節(jié)隱蔽,實現(xiàn)更好的擴展

工廠模式的分類

  • 簡單工廠(靜態(tài)工廠)
  1. 定義一個抽象產(chǎn)品類
  2. 實現(xiàn)具體的產(chǎn)品類
  3. 創(chuàng)建工廠實現(xiàn)被調(diào)用產(chǎn)品實例的方法
  4. 外部類通過工廠調(diào)用實例方法、

抽象產(chǎn)品類

public interface ICreatProduct{
    void creatProduct();
}

具體產(chǎn)品A

public class A implements ICreatProduct{
    @Override
    public void creatProduct(){
        System.out.println("創(chuàng)建商品 A");
    }
}

具體產(chǎn)品B

public class B implements ICreatProduct{
    @Override
    public void creatProduct(){
        System.out.println("創(chuàng)建商品 B")
    }
}

工廠類

public class Factory {
    public static ICreatProduct getProductA(){
        return new A();
    }
    public static ICreatProduct getProductB(){
        return new B();
    }
}

調(diào)用

public class User {
    public static void main (String[] args){
        ICreatProduct a = Factory.getProductA();
        a.creatProduct();
        ICreatProduct b = Factory.getProductB(); 
        b.creatProduct();
    }
}

  • 工廠方法
  1. 定義一個抽象的產(chǎn)品類
  2. 實現(xiàn)具體的產(chǎn)品類
  3. 創(chuàng)建多個抽象的工廠類
  4. 實現(xiàn)具體的工廠類,并提供被調(diào)用的產(chǎn)品的實例 的方法
  5. 外部類通過工廠調(diào)用實例方法

抽象產(chǎn)品

public interface ICreatProduct{
    void creatProduct();
}

具體產(chǎn)品 A

public class A implements ICreatProduct{
    @Override
    public void creatProduct(){
        System.out.println("創(chuàng)建商品 A");
    }
}

具體產(chǎn)品 B

public class B implements ICreatProduct{
    @Override
    public void creatProduct(){
        System.out.println("創(chuàng)建商品 B");
    }
}

抽象工廠

public interface ICreatFactory{
    ICreatProduct productMethod();
}

具體工廠 A

public class AFactory implements ICreatFactory{
    @Override
    public ICreatProduct productMethod(){
        return new A();
    }
    
}

具體工廠 B

public class BFactory implements ICreatFactory{
    @Override
    public ICreatProduct productMethod(){
        return new B();
    }
}

調(diào)用

public class User {
    ICreatFactory factroyA = new AFactory();
    factoryA.creatProduct();
    
    
    ICreatFactory factoryB = new BFactory();
    factoryB.creatProduct();
    
}

  • 抽象工廠
  1. 定義多個抽象的產(chǎn)品類
  2. 實現(xiàn)具體的產(chǎn)品類
  3. 創(chuàng)建多個抽象的工廠類
  4. 實現(xiàn)具體的工廠類,并提供被調(diào)用的產(chǎn)品的實例 的方法
  5. 外部類通過工廠調(diào)用實例方法

抽象產(chǎn)品類

public interface ICreatProduct{
    void creatProduct();
}

具體產(chǎn)品 A

public class A interface ICreatProduct{
    @Override
    public void creatProduct () {
        System.out.println("創(chuàng)建產(chǎn)品 A");
    }
}

具體產(chǎn)品 B

public class B interface ICreatProduct{
    @Override
    public void creatProduct () {
        System.out.println("創(chuàng)建產(chǎn)品 B");
    }
}

創(chuàng)建另一種抽象產(chǎn)品

public interface ICreatOtherProduct{
    void creatOtherProduct();
}

創(chuàng)建具體產(chǎn)品 X

public class X implements ICreatOtherProduct{
    @Override
    public void creatOtherProduct(){
        System.out.println("創(chuàng)建其他產(chǎn)品 X");
    }
}

創(chuàng)建具體產(chǎn)品 Y

public class Y implements ICreatOtherProduct{
    @Override
    public void creatOtherProduct(){
        System.out.println("創(chuàng)建其他產(chǎn)品 Y");
    }
}

創(chuàng)建抽象工廠

public interface ICreatFactory{
    ICreatProduct creatProduct();
    ICreatOtherProduct creatProduct();
}

產(chǎn)品組合工廠

public class FactoryAX implements ICreatFactory{
    @Override 
    public ICreatProduct creatProduct(){
        return new A ();
    }
    
    @Override
    public ICreatOtherProduct creatOtherProduct(){
        return new X ();
    }
}

產(chǎn)品組合工廠

public class FactoryBY implements ICreatFactory{
    @Override 
    public ICreatProduct creatProduct(){
        return new B ();
    }
    
    @Override
    public ICreatOtherProduct creatOtherProduct(){
        return new Y ();
    }
}

調(diào)用者

public class  User {
    ICreatFactory factoryAX = new CreatFactoryAX
    factoryAX.creatProduct();
    factoryAX.creatOtherProduct();
    
    ICreatFactory factoryBY = new CreatFactoryBY
    factoryBY.creatProduct();
    factoryBY.creatOtherProduct();
}

  • 代碼中如有相關(guān)錯誤請指出、純手工敲、未運行過、重要是思路、
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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