抽象工廠模式

/**

 * 超級工廠創建工廠,工廠創建對象

 * @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

 

 */

}

 

}

 

 

 

 


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