Java工厂设计模式

时间:2020-02-23 14:37:08  来源:igfitidea点击:

本文讨论了Java中的工厂设计模式,它是Java中常用的设计模式之一。

Java是一种非常强大的语言。通过面向对象编程的简单性创造了更多的可靠性和安全性,这是每个人都喜欢它的一些主要原因。

工厂设计模式在Java中得到了广泛的应用,考虑到它的用途,它得到了广泛的应用。这种设计模式的方法也称为虚拟构造函数

当我们在Java中创建对象时,我们可能不知道我们可能需要什么类型的对象以及其中实现它们。工厂设计模式正好解决了这个问题。通过理解设计模式本身的名称,我们可以更好地理解它。考虑一个每天生产不同产品的工厂环境。库存包含了制造产品所需的所有材料,但生产的产品类型目前还不清楚。

在编程方面,我们可以将列表中的组件作为类进行比较,但是我们将不知道在运行时实例化哪些组件(要制造什么产品)。

术语factory的出现是因为设计模式生成了许多不同类型的对象,而不必知道创建了什么类型的对象以及它们是如何创建的。当我们有一个超类和各种子类时,它就被使用了。

工厂设计模式被认为是一种创造性的设计模式,部署在JDK和Spring、Struts等框架中。

为什么使用工厂设计模式?

允许子类选择要在运行时期间创建的对象类型

促进松耦合,因为它消除了将特定于应用程序的类绑定到代码中的需要

何时使用工厂设计模式?

当你不知道你的类需要什么子类的时候

当我们希望子类指定要生成的对象时

超级类充当公共接口或者抽象类来创建对象,但让子类决定在运行时实例化哪个类。所以我们可以说,子类负责创建类的实例。

Java工厂设计模式范例

让我们看一个工厂设计模式是如何通过一个真实的例子来实现的,并对其进行编码。

工厂设计模式示例

步骤1:创建一个名为Courses的抽象类

abstract class Courses{  
       protected int duration;  
       protected double fee;
       abstract void getDuration();  
       abstract void getFeePerSemester();  

       public void calculateTotalFee(){  
            System.out.println(duration*fee);  
        }  
}//end of Course class

第2步:创建扩展程序抽象类的类,这里提供计算机、公共服务和卫生三门程序

class  Computer extends Courses{  
      //@override  
      public void getDuration(){  
           duration=8;             //duration in semesters            
      }  

      public void getFeePerSemester(){
	fee = 3000;             //fee in dollars   
      }
 }//end of Computer class.  

class  CivilServices extends Courses{  
      //@override  
       public void getDuration(){  
           duration=6;             //duration in semesters            
      }  

      public void getFeePerSemester(){
	fee = 2000;             //fee in dollars   
      }
}//end of CivilServices class.  

class  Health extends Courses{  
      //@override  
      public void getDuration(){  
           duration=10;             //duration in semesters            
      }  

      public void getFeePerSemester(){
	fee = 5000;             //fee in dollars   
      }
 }//end of Health class.

第三步:创建准入类,生成子类的对象

class Admission{  

 //use admittingCourse method to get object of type Course   
     public Course admittingCourse (String courseName){  
         if(courseName == null){  
             return null;  
         }  
         if(courseName.equalsIgnoreCase("Computer")) {  
               return new Computer();  
         }   
         else if(courseName.equalsIgnoreCase("CivilServices")){  
              return new CivilServices();  
         }   
         else if(courseName.equalsIgnoreCase("Health")) {  
              return new Health();  
         }  
    return null;  
 }  
}//end of Admission class.

第四步:通过申请的程序,即计算机、公共服务、卫生等所需信息,利用招生类获取子类的对象,生成程序的学时和费用信息。

import java.io.*;

class CourseInformation {
  public static void main(String args[]) throws IOException {
      Admission newApplication = new Admission();

      System.out.print("Enter the course you are trying to admit in: ");
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      String cousreName = br.readLine();

      Course c = newApplication.admittingCourse(courseName);

      System.out.print("For  " + courseName + "  the required duration you would have to study is: ");
      c.getDuration();
      System.out.print("For  " + courseName + "  the required fee you would have to pay per semester is: ");
      c.getFeePerSemester();
      System.out.print("The total amount you will have to pay for the entire course duration is:");     
      c.calculateTotalFee();
  }
} //end of CourseInformation class.

这是一个用Java编写的工厂设计模式的实际应用程序的源代码。现在我们知道什么是工厂设计模式,何时应该使用它,以及使用它的优势是什么。