Java在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
人出数,电脑猜数的猜数游戏 发布于:2025-04-20 23:39 四位数不重复数字的猜数字游戏 发布于:2025-04-20 23:03 Java注册登录 发布于:2025-04-19 19:47 java thread 发布于:2025-04-17 22:03 java print date 发布于:2025-04-17 17:35 java help 发布于:2025-04-17 13:07 java 实现两个数字型字符串相加(不使用 Integer.parseInt()) 发布于:2025-04-16 09:10 正态分布cdf 发布于:2025-04-15 10:27 Sign Class 发布于:2025-04-13 18:16 ScoreBoard Class 发布于:2025-04-13 18:11 java速成 发布于:2025-04-12 16:41 最大最小值 发布于:2025-04-10 23:50 几百米跑步 发布于:2025-04-07 14:29 学习中………… 发布于:2025-04-03 10:47 多线程编程 发布于:2025-04-02 10:45 字符串排序 发布于:2025-03-28 17:37 起名注册机 发布于:2025-03-28 14:54 生成BIP解密函数 发布于:2025-03-27 14:28 本金仓位3300算法 发布于:2025-03-22 16:12 测试白名单 发布于:2025-03-22 15:28 连接发送数据 发布于:2025-03-19 15:49 输出所有希腊字母 发布于:2025-03-19 14:49 黄文汉大数据技术31号Java作品 发布于:2025-03-18 21:44 计算个人所得税率 发布于:2025-03-18 21:41 车辆验证代码生成 发布于:2025-03-14 12:01 党政公文自动排版 发布于:2025-03-13 14:29 正则表达式测试代码 发布于:2025-04-07 14:19 冒泡算法 和选择算法 发布于:2025-03-10 15:23 Image processing : Convolution 发布于:2025-03-09 12:22 测试加密diamante 发布于:2025-03-08 15:49 计算煤球数量 发布于:2025-03-08 10:28 finalshell激活码计算 发布于:2025-03-06 23:19 java code 发布于:2025-03-06 14:28 等会我iu好丢 发布于:2025-03-05 16:10 Java运行实验 发布于:2025-03-03 21:25 漂亮置物架 发布于:2025-02-24 21:18 正则匹配例子 发布于:2025-02-25 12:23 网页播放器 发布于:2025-02-21 11:09 代码测试建议 使用以下测试用例验证程序的健壮性: 测试输入 预期结果 1 2 3 4 5 6 0 蓝球范围错误 5 5 8 12 25 30 2 红球重复错误 10 12 22 红球数量不足 1 5 8 12 25 30 33 16 红球数量过多 3 8 15 a 25 30 5 数字解析错误 (空输入) 格式错误 发布于:2025-02-15 20:27 Java Thread 运行 发布于:2025-02-14 11:48 使用 javac Stu.java Main.java 命令 发布于:2025-02-10 09:39 签名demo 发布于:2025-01-22 09:47 测试月份生存 发布于:2025-01-21 11:12 java 对面 发布于:2025-01-18 07:23 api调用案例 发布于:2025-01-10 17:33 计算表位置 发布于:2025-02-28 15:30 游戏外挂基础。 发布于:2025-01-06 22:26 UnaryOperator例子 发布于:2024-12-30 09:24 minecraft mod auto arua 发布于:2024-12-29 21:06 测试list peek使用方法 发布于:2024-12-29 14:43 [更多]
显示目录

抽象工厂模式



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

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

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

Inside Circle::draw() method
Inside Rectangle::draw() method
Inside Square ::draw() method
paper
web
screen
由JSRUN为你提供的Java在线运行、在线编译工具
        JSRUN提供的Java 在线运行,Java 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout