java抽象工厂模式_Java 抽象工厂模式

Java设计模式 - 抽象工厂模式

抽象工厂模式是另一个创建模式。

抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂。

当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建对象。

例子

下面的代码展示了如何使用抽象工厂模式。

我们将要创建形状和打印机。对于形状,我们会有圆形,矩形和正方形。对于打印机,我们将有纸张打印机,网络打印机和屏幕打印机。

对于shape,我们将创建Shape界面,如下所示:interface Shape {

void draw();

}

然后我们创建实现Shape接口的具体类。class Rectangle implements Shape {

@Override

public void draw() {

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

}

}

class Square implements Shape {

@Override

public void draw() {

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

}

}

class Circle implements Shape {

@Override

public void draw() {

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

}

}

我们为打印机创建一个界面。interface Printer{

void print();

}

然后我们创建实现Printer接口的具体类。class PaperPrinter implements Printer{

@Override

public void print() {

System.out.println("paper");

}

}

class WebPrinter implements Printer{

@Override

public void print() {

System.out.println("web");

}

}

class ScreenPrinter implements Printer{

@Override

public void print() {

System.out.println("screen");

}

}

最后,我们创建一个抽象类来获取打印机和形状对象的工厂。abstract class AbstractFactory {

abstract Printer getPrinter(String type);

abstract Shape getShape(String shape) ;

}

最后,我们创建Factory类,根据给定的信息扩展AbstractFactory以生成具体类的对象。class ShapeFactory extends AbstractFactory {

@Override

public 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;

}

@Override

Printer getPrinter(String type) {

return null;

}

}

class PrinterFactory extends AbstractFactory {

@Override

public Shape getShape(String shapeType){

return null;

}

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

}

}

创建一个Factory生成器/生产器类,通过传递Shape或Printer等信息来获取工厂。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;

}

}

下面的代码展示了如何使用抽象工厂模式。public class Main {

public static void main(String[] args) {

//get shape factory

AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

//get an object of Shape Circle

Shape shape1 = shapeFactory.getShape("CIRCLE");

//call draw method of Shape Circle

shape1.draw();

//get an object of Shape Rectangle

Shape shape2 = shapeFactory.getShape("RECTANGLE");

//call draw method of Shape Rectangle

shape2.draw();

//get an object of Shape Square

Shape shape3 = shapeFactory.getShape("SQUARE");

//call draw method of Shape Square

shape3.draw();

//get printer factory

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();

}

}

上面的代码生成以下结果。

a04889d4a78b195ce33daac955521339.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值