/** * 超級工廠創建工廠,工廠創建對象 * @author ruis * */ //設計一個接口來表示Shape public interface Shape { //接口方法:畫圖的方法 void draw(); } |
//創建實現接口的具體類的方法 圓形類 public class Circle implements Shape {
@Override public void draw() { // 創建一個畫圓形的方法 System.out.println("Inside Circle::draw() method."); }
} //創建實現接口的具體類 正方形類 public class Square implements Shape {
@Override public void draw() { // 一個畫正方形的方法 System.out.println("Inside Square::draw()method."); }
} //創建實現接口的具體類 矩形類 public class Rectangle implements Shape {
@Override public void draw() { //包含一個畫矩形的方法 System.out.println("Inside Rectangle::draw()method."); }
}
|
//爲打印機創建一個界面 public interface Printer {
void print(); }
|
//創建實現打印機接口的具體類 紙質打印機類 public class PaperPrinter implements Printer {
@Override public void print() { System.out.println("paper");
}
} //創建實現打印機接口的具體類 網頁式打印機類 public class WebPrinter implements Printer {
@Override public void print() {
System.out.println("web"); }
} //創建實現打印機接口的具體類 屏幕式打印機類 public class ScreenPrinter implements Printer {
@Override public void print() {
System.out.println("screen"); }
} |
//創建一個抽象類來獲取打印機和形狀對象的工廠 public abstract class AbstractFactory {
abstract Printer getPringer(String type); abstract Shape getShape(String shape);
Printer getPrinter(String type) {
return null; } }
|
//創建形狀工廠ShapeFactory類,根據給定的信息判斷生成形狀對象 public class ShapeFactory extends AbstractFactory {
@Override Printer getPringer(String type) { // TODO Auto-generated method stub return null; }
@Override Shape getShape(String shapeType) {
if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); }
return null; }
}
|
//創建打印工廠PrinterFactory類,根據給定的信息判斷生成打印機對象 public class PrinterFactory extends AbstractFactory {
@Override Printer getPrinter(String type) { if (type == null) { return null; } if (type.equalsIgnoreCase("paper")) { return new PaperPrinter(); } else if (type.equalsIgnoreCase("web")) { return new WebPrinter(); } else if (type.equalsIgnoreCase("Screen")) { return new ScreenPrinter(); } return null; }
@Override Shape getShape(String shape) { // TODO Auto-generated method stub return null; }
@Override Printer getPringer(String type) { // TODO Auto-generated method stub return null; }
}
|
//創建一個Factory生成器/生產器類,通過傳遞Shape或Printer等信息來獲取工廠。 public class FactoryProducer {
public static AbstractFactory getFactory(String choice){ if(choice.equalsIgnoreCase("SHAPE")){ return new ShapeFactory(); }else if(choice.equalsIgnoreCase("Printer")){ return new PrinterFactory(); } return null; } }
|
/** * 獲取工廠A,通過工廠A的get()方法獲取對象,調用對象的方法 * 獲取工廠B,通過工廠B的get()方法獲取對象,調用對象的方法 * @author ruis * */ public class Main {
public static void main(String[] args) {
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
Shape shape1 = shapeFactory.getShape("CIRCLE"); shape1.draw();
Shape shape2 = shapeFactory.getShape("RECTANGLE"); shape2.draw();
Shape shape3 = shapeFactory.getShape("SQUARE"); shape3.draw();
AbstractFactory printerFactory = FactoryProducer.getFactory("printer");
Printer printer1 = printerFactory.getPrinter("Paper"); printer1.print();
Printer printer2 = printerFactory.getPrinter("Web"); printer2.print();
Printer printer3 = printerFactory.getPrinter("Screen"); printer3.print();
/** * Inside Circle::draw() method. Inside Rectangle::draw()method. Inside Square::draw()method. paper web screen
*/ }
}
|