/** * 超级工厂创建工厂,工厂创建对象 * @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
*/ }
}
|