軟件設計——簡單工廠模式之女媧造人


一、簡單工廠模式含義

簡單工廠模式又叫靜態方法模式(因為工廠類定義了一個靜態方法)

現實生活中,工廠是負責生產產品的;同樣在設計模式中,簡單工廠模式我們可以理解為負責生產對象的一個類,稱為“工廠類”

二、解決的問題

將“類實例化的操作”與“使用對象的操作”分開,讓使用者不用知道具體參數就可以實例化出所需要的“產品”類,從而避免了在客戶端代碼中顯式指定,實現了解耦。

即使用者可直接消費產品而不需要知道其生產的細節

三、模式原理

3.1 模式組成

3.2 UML類圖

3.3 使用步驟

  • 創建抽象產品類 & 定義具體產品的公共接口;

  • 創建具體產品類(繼承抽象產品類) & 定義生產的具體產品;

  • 創建工廠類,通過創建靜態方法根據傳入不同參數從而創建不同具體產品類的實例;

  • 外界通過調用工廠類的靜態方法,傳入不同參數從而創建不同具體產品類的實例

四、具體實例

[實驗任務一]:女媧造人

實驗要求:使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果傳入參數M,則返回一個Man對象,如果傳入參數W,則返回一個Woman對象,如果傳入參數R,則返回一個Robot對象。請用程序設計實現上述場景。

4.1 UML類圖

接口和類的區別:

從定義上看,接口是個集合,並不是。 描述了屬性和方法,而接口只包含方法(未實現的方法)。 接口和抽象一樣不能被實例化,因為不是。 但是接口可以被實現(使用implements 關鍵字)。

 

4.2 代碼

Person . java

package test2;

public interface Person {
	
	public void make();
	
}

 創建接口:File ---------> new  -------->  interface

Man . java

package test2;

public class Man implements Person{
	
	public Man() {
		
    }
    public void make(){
    	
        System.out.print("生產男人");
        
    }
}

Woman . java

package test2;

public class Woman implements Person{
	
	public Woman() {
	}
	
	public void make() {
		
		System.out.print("生產女人");
		
	}
}

Robot . java

package test2;

public class Robot implements Person{
	
	public Robot() {
    }
	
    public void make(){
    	
        System.out.print("生產機器人");
        
    }
}

Nvwa . java

package test2;

public class Nvwa {

	public Nvwa() {
	
	}

	public static  Person Personjudge(String arg ) {
        //判斷參數,再選擇調用哪個類
        if(arg.equalsIgnoreCase("M"))
        {
            return new Man();
        }else if(arg.equalsIgnoreCase("W"))
        {
            return new Woman();
        }else if(arg.equalsIgnoreCase("R"))
        {
            return new Robot();
        }else
        {
            return null;
        }
    }
	}

test . java

package test2;

import java.util.Scanner;

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		  System.out.print("請輸入參數:");
		  String s = scan.nextLine();
		  
		try{
            Person p = Nvwa.Personjudge(s);
            p.make();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
		scan.close();
	}

}

4.3 運行截圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM