广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州Java抽象工厂模式是什么?_北大青鸟IT计算机学校

作者:邓华发布时间:2021-03-29分类:Java技术浏览:969


导读:上节惠州北大青鸟老师给大家科普了Java工厂模式是什么,那么Java抽象工厂模式是什么呢?接下来跟着老师一起来学习Java抽象工厂模式是什么。

上节惠州北大青鸟老师给大家科普了Java工厂模式是什么,那么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();
  }
}

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

Java抽象工厂模式.png

想了解更多关于Java的资讯,可以来惠州北大青鸟新方舟校区了解一下。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表