17、設計模式之抽象工廠模式
阿新 • • 發佈:2018-12-16
抽象類
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視訊