java工廠模式代碼例子(簡單的工廠模式java)

本文目錄一覽:

求java工廠模式的一個簡單代碼例子,盡量簡單

這個應該比較簡單一點。

某系統日誌記錄器要求支持多種日誌記錄方式,如文件記錄、數據庫記錄等,且用戶可以根據要求動態選擇日誌記錄方式。現使用工廠方法模式設計該系統,並寫出相應Java代碼。

interface Log{

    public void writeLog();

}

class FileLog implements Log{

    public void writeLog(){

        System.out.println(“文件記錄”);

    }

}

class DatabaseLog implements Log{

    public void writeLog(){

        System.out.println(“數據庫記錄”);

    }

}

interface LogFactory{

    public Log createLog();

}

class FileLogFactory implements LogFactory{

    public Log createLog(){

        return new FileLog();

    }

}

class DatabaseLogFactory implements LogFactory{

    public Log createLog(){

        return new DatabaseLog();

    }

}

public class Client{

    public static void main(String[] args) {

        try{

            Log log;

            LogFactory factory;

//這裡可以改成使用DOM和Java反射機制讀取XML文件,獲取工廠類名

            factory=new DatabaseLogFactory ();

            log=factory.createLog();

            log.writeLog();

        }

        catch(Exception e){

            System.out.println(e.getMessage());

        }

    }

}

JAVA工廠模式和單體模式

單體模式 很簡單,就是將構造函數變為私有,那麼就不能通過new 來創建對象。 同時創建一個 共有的靜態的方法來獲得實例,代碼如下:

class Test{

private static Test instance = null;

private Test(){}

public static Test getInstance(){

if( instance == null ){

instance = new Test();

}

return instance ;

}

}

工廠模式有三個參與者,抽象產品(Product)、工廠(Creator)和具體產品(ConcreteProduct)。客戶只會看到工廠和抽象產品。

public interface Product{

public String getName();

}

public class ConcreteProduct implements Product{

public String getName(){

return “產品1”;

}

}

public class Creator{

public static Product create1(){

return new ConcreteProduct();

}

}

工廠模式的作用在於將創建具體產品的方法由工廠類控制,客戶只需要知道產品的抽象類型

java工廠模式例子

產品

public interface Work {

void doWork();

}

ConcreteProduct

public class StudentWork implements Work {

public void doWork() {

System.out.println(“學生做作業!”);

}

}

public class TeacherWork implements Work {

public void doWork() {

System.out.println(“老師審批作業!”);

}

}

生產者

public interface IWorkFactory {

Work getWork();

}

ConcreteCreator

public class StudentWorkFactory implements IWorkFactory {

public Work getWork() {

return new StudentWork();

}

}

public class TeacherWorkFactory implements IWorkFactory {

public Work getWork() {

return new TeacherWork();

}

}

Test

public class Test {

public static void main(String[] args) {

IWorkFactory studentWorkFactory = new StudentWorkFactory();

studentWorkFactory.getWork().doWork();

IWorkFactory teacherWorkFactory = new TeacherWorkFactory();

teacherWorkFactory.getWork().doWork();

}

}

java簡單工廠模式是什麼

簡單工廠模式的:簡單工廠模式是類的創建模式,又叫做靜態工廠方法(Static Factory Method)模式。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。

那麼簡單工廠模式是在什麼場景下使用呢,下面就以本人的理解舉例說明:

就拿登錄功能來說,假如應用系統需要支持多種登錄方式如:口令認證、域認證(口令認證通常是去數據庫中驗證用戶,而域認證則是需要到微軟的域中驗證用戶)。那麼自然的做法就是建立一個各種登錄方式都適用的接口,如下圖所示:

public interface Login {

//登錄驗證

public boolean verify(String name , String password);

}

public class DomainLogin implements Login {

@Override

public boolean verify(String name, String password) {

// TODO Auto-generated method stub

/**

* 業務邏輯

*/

return true;

}

}

public class PasswordLogin implements Login {

@Override

public boolean verify(String name, String password) {

// TODO Auto-generated method stub

/**

* 業務邏輯

*/

return true;

}

}

我們還需要一個工廠類LoginManager,根據調用者不同的要求,創建出不同的登錄對象並返回。而如果碰到不合法的要求,會返回一個Runtime異常。

public class LoginManager {

public static Login factory(String type){

if(type.equals(“password”)){

return new PasswordLogin();

}else if(type.equals(“passcode”)){

return new DomainLogin();

}else{

/**

* 這裡拋出一個自定義異常會更恰當

*/

throw new RuntimeException(“沒有找到登錄類型”);

}

}

}

測試類:

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String loginType = “password”;

String name = “name”;

String password = “password”;

Login login = LoginManager.factory(loginType);

boolean bool = login.verify(name, password);

if (bool) {

/**

* 業務邏輯

*/

} else {

/**

* 業務邏輯

*/

}

}

}

簡單工廠模式的結構如下圖:

我們可以設想一下真實的場景,如果把上面的Test當做一個servlet的話,當客戶端發起登錄請求——請求交給服務端的Servlet——Servlet根據客戶端傳遞的loginType調用工廠類LoginManager的factory()方法——factory()方法根據參數loginType創建相應的登錄驗證類(DomainLogin或PasswordLogin)並返回——登錄驗證類調用方法verify()驗證用戶名密碼是否正確

假如不使用簡單工廠模式則驗證登錄Servlet代碼如下(假設Test為一個Servlet,變量loginType、name、password表示從客戶端傳遞過來的參數):

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String loginType = “password”;

String name = “name”;

String password = “password”;

//處理口令認證

if(loginType.equals(“password”)){

PasswordLogin passwordLogin = new PasswordLogin();

boolean bool = passwordLogin.verify(name, password);

if (bool) {

/**

* 業務邏輯

*/

} else {

/**

* 業務邏輯

*/

}

}

//處理域認證

else if(loginType.equals(“passcode”)){

DomainLogin domainLogin = new DomainLogin();

boolean bool = domainLogin.verify(name, password);

if (bool) {

/**

* 業務邏輯

*/

} else {

/**

* 業務邏輯

*/

}

}else{

/**

* 業務邏輯

*/

}

}

}

上面的代碼會不會很蛋疼啊。。。呵呵

《JAVA與模式》一書中使用java.text.DataFormat類作為簡單工廠模式的典型例子敘述。

簡單工廠模式的優點

模式的核心是工廠類。這個類含有必要的邏輯判斷,可以決定在什麼時候創建哪一個登錄驗證類的實例,而調用者則可以免除直接創建對象的責任。簡單工廠模式通過這種做法實現了對責任的分割,當系統引入新的登錄方式的時候無需修改調用者。

簡單工廠模式的缺點

這個工廠類集中了所以的創建邏輯,當有複雜的多層次等級結構時,所有的業務邏輯都在這個工廠類中實現。什麼時候它不能工作了,整個系統都會受到影響。

寫一個抽象工廠模式 java實例 出來

工廠模式java實例如下:

public interface Work {

   void doWork();

}

ConcreteProduct

public class StudentWork implements Work {

   public void doWork() {

       System.out.println(“學生做作業!”);

   }

}

public class TeacherWork implements Work {

   public void doWork() {

       System.out.println(“老師審批作業!”);

   }

}

生產者

public interface IWorkFactory {

   Work getWork();

}

ConcreteCreator

public class StudentWorkFactory implements IWorkFactory {

   public Work getWork() {

       return new StudentWork();

   }

}

public class TeacherWorkFactory implements IWorkFactory {

   public Work getWork() {

       return new TeacherWork();

   }

}

Test

public class Test {

   public static void main(String[] args) {

       IWorkFactory studentWorkFactory = new StudentWorkFactory();

       studentWorkFactory.getWork().doWork();

       

       IWorkFactory teacherWorkFactory = new TeacherWorkFactory();

       teacherWorkFactory.getWork().doWork();

   }

}

字符串反轉如下:

public String getReverseStr(String str)

{

  String reverseStr = “”;

  if (null != str !str.equals(“”))

  {

      for (int i = 1 ; i =str.length(); i++){

            reverseStr += str.charAt(str.length() – i);

            // 依次按與原字符串相反的順序拼裝字符串,內部會自動進行類型轉換

            //str.length() – i剛好是str的下標,因為i是從1開始

      }

 }

  return reverseStr;

}

冒泡排序算法,從小到大

public int[] sortArr(int[] targetArr){

         //小到大的排序

           int temp = 0;

           for(int i = 0;itargetArr.length;i++){

               for(int j = i;jtargetArr.length;j++){

                   if(targetArr[i]targetArr[j]){

                       temp = targetArr[i];

                       targetArr[i] = targetArr[j];

                       targetArr[j] = temp;

                      }

                }

           }

        return targetArr;

}

原創文章,作者:XVYAA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/130306.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XVYAA的頭像XVYAA
上一篇 2024-10-03 23:28
下一篇 2024-10-03 23:28

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29

發表回復

登錄後才能評論