設計模式(二) 工廠模式(工廠方法)

2021-10-09 21:46:08 字數 2399 閱讀 1987

之前學習了簡單工廠我們明白了,簡單工廠雖然有一定的好處,但是還不夠好,它無法滿足開閉原則,我們在如果新增產品的話,就需要更改已有的工廠類。工廠方法模式就是在簡單工廠的基礎上,滿足開閉原則,讓我們只需要新增類就好,不用去更改已有**。

展示下之前的database、mysql、sqlserver三個類。

package study.factory.method;

/** * @author 阿呆的小雞仔

*/public

abstract

class

database

/** * 設定資料庫名稱

* @return 資料庫的名稱

*/protected

abstract string getdatabasename()

;/**

* 建立資料庫連線例項需要的操作,每種資料庫應該都是不一樣的

*/void

prepare()

/** * 建立連線完成時的操作

*/void

finish()

/** * 假設這個是例項的功能,可以用來執行查詢語句

* @param query 查詢語句

*/public

abstract

void

query

(string query)

;}

package study.factory.method;

/** * @author 阿呆的小雞仔

*/public

class

mysql

extends

database

@override

public string getdatabasename()

@override

public

void

query

(string query)

}

package study.factory.method;

/** * @author 阿呆的小雞仔

*/public

class

sqlserver

extends

database

@override

public string getdatabasename()

@override

void

prepare()

@override

public

void

query

(string query)

}

那新的工廠類又是怎麼寫的呢,怎麼做才可以滿足開閉原則?簡單工廠是將所有的產品都讓乙個工廠生產,所以要新增產品種類就一定會需要修改現有工廠類,那我們如果讓乙個工廠只生產乙個產品,那麼是不是就可以滿足開閉原則 了。

第一步:編寫所有工廠的抽象類

package study.factory.method;

/** * @author 阿呆的小雞仔

*/public

abstract

class

databasefactory

第二步:編寫具體的工廠類去實現抽象工廠類
package study.factory.method;

/** * @author 阿呆的小雞仔

*/public

class

mysqldatabasefactory

extends

databasefactory

}

package study.factory.method;

/** * @author 阿呆的小雞仔

*/public

class

sqlserverdatabasefactory

extends

databasefactory

}

第三步:編寫測試類使用一下
package study.factory;

import study.factory.method.database;

import study.factory.method.databasefactory;

import study.factory.method.mysqldatabasefactory;

public

class

main

}

總結:

現在,如果我們還需要新增加乙個oracle資料庫,只需要編寫乙個oracledatabasefactory類,並且讓他繼承databasefactory抽象類就可以了,不用修改之前寫過的類。

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

設計模式(二)工廠方法模式 抽象工廠模式

工廠方法模式與簡單工廠模式的區別在於 簡單工廠模式用單一工廠來生產所有同種類的產品,而工廠模式是用對應的工廠來生產同一種類的不同產品。對於工廠方法模式而言,其簡單模型的uml為 工廠方法模式的定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到工廠抽象類的子類。...

工廠模式二 工廠方法模式

使用者只需要關心產品對應的工廠,不需要關心建立細節。例如貓和狗都屬於動物一類,都具有吃飯這個功能。先定義介面ianimal public inte ce ianimal實現介面ianimal介面cat類和dog類 public class cat implements ianimal public ...