抽象工厂模式

/**

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

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

 

 */

}

 

}

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值