抽象工厂模式

来源:互联网 发布:java内嵌机制 编辑:程序博客网 时间:2024/06/05 08:15

/**

 * 超级工厂创建工厂,工厂创建对象

 * @author ruis

 *

 */

//设计一个接口来表示Shape

public interface Shape {

//接口方法:画图的方法

void draw();

}

//创建实现接口的具体类的方法 圆形类

public class Circleimplements Shape {

 

@Override

public void draw() {

// 创建一个画圆形的方法

System.out.println("Inside Circle::draw() method.");

}

 

}

//创建实现接口的具体类 正方形类

public class Squareimplements Shape {

 

@Override

public void draw() {

// 一个画正方形的方法

System.out.println("Inside Square::draw()method.");

}

 

}

//创建实现接口的具体类 矩形类

public class Rectangleimplements Shape {

 

@Override

public void draw() {

//包含一个画矩形的方法

System.out.println("Inside Rectangle::draw()method.");

}

 

}

 

 

 

//为打印机创建一个界面

public interface Printer {

 

void print();

}

 

//创建实现打印机接口的具体类  纸质打印

public class PaperPrinterimplements Printer {

 

@Override

public void print() {

System.out.println("paper");

 

}

 

}

//创建实现打印机接口的具体类  网页式打印

public class WebPrinterimplements Printer {

 

@Override

public void print() {

 

System.out.println("web");

}

 

}

//创建实现打印机接口的具体类   屏幕式打印

public class ScreenPrinterimplements Printer {

 

@Override

public void print() {

 

System.out.println("screen");

}

 

}

 

//创建一个抽象类来获取打印机和形状对象的工厂

public abstract class AbstractFactory {

 

abstract Printer getPringer(Stringtype);

abstract Shape getShape(Stringshape);

 

Printer getPrinter(Stringtype) {

 

return null;

}

}

 

 

//创建形状工厂ShapeFactory类,根据给定的信息判断生成形状对象

public class ShapeFactoryextends 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 PrinterFactoryextends 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(Stringchoice){

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

 

 */

}

 

}

 

 

 

 


原创粉丝点击