Abstract Factory模式是另一种创建模式。
抽象工厂模式,也被称为工厂的厂,有它创建其他工厂一个工厂。
当使用抽象工厂模式,我们先用超级工厂创建工厂,然后使用创建的工厂创建对象。
下面的代码演示了如何使用抽象工厂模式。
我们要创建的形状和打印机。对于形状,我们将有圆形,长方形和正方形。对于打印机,我们将有纸打印机,网络打印机和丝网印刷机。
对于形状,我们将创建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();
}
然后,我们创建具体的类实现打印机接口。
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) ;
}
最后,我们创建延伸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;
}
}
创建一个厂发电机/生产类传递一个信息,如形状或打印机拿到工厂
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 of Shape Circle
Shape shape1 = shapeFactory.getShape(\"CIRCLE\");
//call draw method of Shape Circle
shape1.draw();
//get an of Shape Rectangle
Shape shape2 = shapeFactory.getShape(\"RECTANGLE\");
//call draw method of Shape Rectangle
shape2.draw();
//get an 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();
}
}
继续阅读与本文标签相同的文章
上一篇 :
Java的工厂模式简介
-
城市数字化后,新一代内生安全系统可全方位保护
2026-05-14栏目: 教程
-
谷歌也来“唱衰”5G,5G手机只会徒增功耗?为何这么说?
2026-05-14栏目: 教程
-
量子信息和量子技术白皮书合肥宣言在中科大发布
2026-05-14栏目: 教程
-
微信悄悄更新一新功能,来看看!
2026-05-14栏目: 教程
-
打破三大运营商垄断,第四大运营商终于来了!
2026-05-14栏目: 教程
