四、設計模式之抽象工廠

一、抽象工廠定義

抽象工廠模式提供一個建立一系列相關或相互依賴對象的接口。
無須指定它們具體的類。

適用場景:
1) 客戶端不依賴於產品類實例如何被建立、實現等細節
2) 強調一系列相關的產品對象(屬於同一個產品族)一塊兒使用建立對象對象須要大量重複代碼
3) 提供一個產品類的庫,全部產品以一樣的接口出現,從而使客戶端不依賴於具體的實現

優勢:
1) 具體產品在應用層代碼隔離,無須關心建立細節
2) 將一個系列的產品族統一到一塊兒建立

缺點:
1) 規定了全部可能被建立的產品集合,產品族中擴展新的產品困難,須要修改抽象工廠的集合
2) 增長了系統的抽象性和理解難度

下圖是抽象工廠的產品族和產品等級結構。同一行是一個產品族,好比同屬美的公司生產的冰箱、空調。而同一列則是同一類產品,好比美的的空調、海爾的空調。工廠方法模式針對的產品等級結構,而抽象工廠模式針對的是產品族,這是工廠方法和抽象工廠模式最大的區別
clipboard.pngide

二、代碼演示

public abstract class Video {
    public abstract void produce();
}

public class JavaVideo extends Video {
    @Override
    public void produce() {
        System.out.println("錄製Java課程視頻");
    }
}

public class PythonVideo extends Video {
    @Override
    public void produce() {
        System.out.println("錄製Python課程視頻");
    }
}
public abstract class Article {
    public abstract void produce();
}

public class JavaArticle extends Article {
    @Override
    public void produce() {
        System.out.println("編寫Java課程手記");
    }
}

public class PythonArticle extends Article {
    @Override
    public void produce() {
        System.out.println("編寫Python課程手記");
    }
}
public interface CourseFactory {
    Video getVideo();
    Article getArticle();
}
public class JavaCourseFactory implements CourseFactory {
    @Override
    public Video getVideo() {
        return new JavaVideo();
    }
    
    @Override
    public Article getArticle() {
        return new JavaArticle();
    }
}

public class PythonCourseFactory implements CourseFactory {
    @Override
    public Video getVideo() {
        return new PythonVideo();
    }
    
    @Override
    public Article getArticle() {
        return new PythonArticle();
    }
}
public class Test {
    public static void main(String[] args) {
        CourseFactory courseFactory = new JavaCourseFactory();
        Video video = courseFactory.getVideo();
        Article article = courseFactory.getArticle();
        video.produce();
        article.produce();
    }
}
相關文章
相關標籤/搜索