設計模式(一) —— 工廠模式

一.簡單工廠模式

基本概念:由一個工廠對象決定創建哪一種產品類的實例。簡單工廠模式它不屬於23種設計模式。

試用場景:適用於工廠類負責創建的對象較少的場景,且客戶端只需傳入工廠類的參數,對於如何創建對象不需要關心。

缺點:隨着產品鏈的豐富,如果每個課程的創建邏輯有區別,則工廠的職責會變得越來越多,職責相對過重,不易於擴展過於複雜的產品結構。

案例:Calendar

代碼實例:

/*創建課程接口*/
public interface ICourse {
    void record();
}


/*我是一個java課實例*/
public class JavaCourse implements ICourse {

    public void record() {
        System.out.println("Java課程");
    }
}


/*我是一個python課實例*/
public class PythonCourse implements ICourse {

    public void record() {
        System.out.println("Python課程");
    }
}

 
/*創建一個課程類工廠,傳入需要創建的課程類,返回課程類實體*/
public class CourseFactory {
    public ICourse create(Class<? extends ICourse> clazz){
        try {
            if (null != clazz) {
                return clazz.newInstance();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}


/*調用*/
 public static void main(String[] args) {
        CourseFactory factory = new CourseFactory();
        ICourse course = factory.create(JavaCourse.class);
        course.record();
    }

注:newInstance()也是用來創建新的對象,其與new()的區別是:newInstance():弱類型,效率低,只能調用無參構造new():強類型,高效率,能調用任何public構造器

二.工廠模式

基本概念:定義一個創建對象的接口,讓實現這個接口的類決定實例化那個類,工廠方法模式讓類的實例化推遲到子類中進行。在工廠方法模式中用戶只需要關心所需產品對應的工廠,無需關心創建細節,並且加入新的產品時符合開閉原則。

特點:工廠模式不同於簡單工廠,將職能拆分,專人幹專事。Java課程由Java工廠創建,Python課程由python工廠創建,對工廠本身也做一個抽象。

試用場景:創建對象需要大量重複的代碼;客戶端(應用層)不依賴於產品類實例如何被創建等細節;一個類通過其子類來指定創建那個類。

缺點:類的個數容易過多,增加複雜度;增加了系統的抽象性和理解難度

/*抽象課程工廠類*/
public interface ICourseFactory {

    ICourse create();
}

/*Java課程工廠類*/
public class JavaCourseFactory implements ICourseFactory {
    public ICourse create() {
        return new JavaCourse();
    }
}

/*Python課程工廠類*/
public class PythonCourseFactory implements ICourseFactory {
    public ICourse create() {
        return new PythonCourse();
    }
}


/*調用測試*/
public class FactoryMethodTest {
    public static void main(String[] args) {

        /*java的調用java的*/
        ICourseFactory factory = new PythonCourseFactory();
        ICourse course = factory.create();
        course.record();
    }
}

案例:logback

 

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