1. 程式人生 > >17、設計模式之抽象工廠模式

17、設計模式之抽象工廠模式

抽象類

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

簡單描述下需求環境,這裡模擬的課程資訊,包含視訊和手札,上面分別代表Video (視訊) 和 Arictle(手札)

抽象工廠類

public abstract class CourseFactory {
    /** 視訊 */
    public abstract Video getVideo();

    /** 手札 */
    public abstract Arictle getArictle();

}

課程的抽象工廠類,聚合了視訊和手札提供方法,為具體的課程工廠類提供一系列的產品及服務,這區別於工廠方法模式的一點就在於打包提供服務

Java課程

public class JavaVideo extends Video {
    @Override
    public void produce() {
        System.out.println("Java視訊");
    }
}
public class JavaArictle extends Arictle {
    @Override
    public void produce() {
        System.out.println("Java手札");
    }
}
public class JavaCourseFactory extends CourseFactory {
    @Override
    public Video getVideo() {
        return new JavaVideo();
    }

    @Override
    public Arictle getArictle() {
        return new JavaArictle();
    }
}

同樣接入進來的課程產品,都以這樣的方式來完成

Python課程

public class PythonVideo extends Video {
    @Override
    public void produce() {
        System.out.println("Python視訊");
    }
}
public class PythonArictle extends Arictle {
    @Override
    public void produce() {
        System.out.println("Python手札");
    }
}
public class PythonCourseFactory extends CourseFactory {
    @Override
    public Video getVideo() {
        return new PythonVideo();
    }

    @Override
    public Arictle getArictle() {
        return new PythonArictle();
    }
}

呼叫

public class Main {

    public static void main(String[] args) {
        System.out.println("抽象工廠模式");
        // 切換課程,只需要將JavaCourseFactory替換為PythonCourseFactory 即可
        CourseFactory factory = new JavaCourseFactory();
        Arictle arictle = factory.getArictle();
        arictle.produce();
        Video video = factory.getVideo();
        video.produce();
    }
}

執行結果

抽象工廠模式 Java手札 Java視訊