Java常用設計模式--三種工廠模式之工廠模式(Factory Pattern)

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。

在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用一個共同的接口來指向新創建的對象。

工廠方法模式角色:

  1. 抽象工廠(Abstract Factory)角色:是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口。
  2. 具體工廠(Concrete Factory)角色 :這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,並且受到應用程序調用以創建某一種產品對象。
  3. 抽象產品(AbstractProduct)角色 :工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。
  4. 具體產品(Concrete Product)角色 :這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應

 簡單工廠例子中的奶茶接口以及相關奶茶實現類不變。我們只需要增加一個工廠接口以及實現這個接口的工廠類即可。

例子代碼:

package com.example.factorypattern;

public interface MilkyTea {

    /**
     * 製造奶茶
     */
    void makeMilkyTea();

}
package com.example.factorypattern;

public class BoBaMilkyTeam implements MilkyTea {
    @Override
    public void makeMilkyTea() {
        System.out.println("製作波霸奶茶");
    }
}
package com.example.factorypattern;

/**
 * 紅豆奶茶
 */
public class OrmosiaMilkyTea implements MilkyTea {

    @Override
    public void makeMilkyTea() {
        System.out.println("製作紅豆奶茶");
    }
}
package com.example.factorypattern;

public class PearlMilkyTea implements MilkyTea {
    @Override
    public void makeMilkyTea() {
        System.out.println("製作珍珠奶茶");
    }
}
package com.example.factorypattern;

public interface Factory {

    MilkyTea makeMilkyTea();

}
package com.example.factorypattern;

public class BoBaMilkyTeamFactory implements Factory{
    @Override
    public MilkyTea makeMilkyTea() {
        return new BoBaMilkyTeam();
    }
}
package com.example.factorypattern;

public class OrmosiaMilkyTeaFactory implements Factory {
    @Override
    public MilkyTea makeMilkyTea() {
        return new OrmosiaMilkyTea();
    }
}
package com.example.factorypattern;

public class PearlMilkyTeaFactory implements Factory {
    @Override
    public MilkyTea makeMilkyTea() {
        return new PearlMilkyTea();
    }
}
package com.example.factorypattern;

import com.example.simplefactory.SimpleFactory;

public class Test {

    public static void main(String[] args) {
        Factory boBaMilkyTeamFactory = new BoBaMilkyTeamFactory();
        MilkyTea milkyTea = boBaMilkyTeamFactory.makeMilkyTea();
        milkyTea.makeMilkyTea();
    }

}

 

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