2 工廠模式

2021-07-27 16:43:41 字數 3164 閱讀 4467

意圖:定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類

三個角色:1.抽象產品 2.具體產品(實現抽象產品) 3.工廠類(建立產品例項的具體邏輯)

情景:其實不止英雄聯盟,其他很多遊戲都是,在你名字建好之後,系統會預設彈出乙個選項框 0.第一次玩 1.我是大神 ,選擇0會自動進入新手教學模式,1直接轉到遊戲大廳(這類玩家最煩的就是你多bb)

使用者級別的抽象類:定義級別的規範(大部分情況下介面和抽象類可以根據自己的情況選擇)

/**

* created by shixin-pc on 2018/5/7.

* 抽象產品,玩家選擇的級別

*/public

inte***ce

level

使用者級別:實現使用者級別介面

/**

* created by shixin-pc on 2018/5/7.

* 第一次玩

*/public

class

firstplay

implements

level

}

/**

* created by shixin-pc on 2018/5/7.

* 我是大神

*/public

class

superiorplayer

implements

level

}

工廠:實現建立所有級別例項的內部邏輯

/**

* created by shixin-pc on 2018/4/10.

* 工廠

*/public

class

me return

null;

}}

呼叫

/**

* 簡單工廠

*/private

void

******factory(int option)

簡單工廠又叫靜態工廠

優點:優點在於呼叫者只需要關心傳入的引數而無需關係邏輯和物件是如何產生

缺點:比如我新增乙個級別,就需要修改me這個類的邏輯,違反了開閉原則,也正是這個原因,簡單工廠其實不算是設計模式中的一種

意圖:定義乙個用於建立物件的介面,讓子類決定例項化那乙個類

方法工廠其實就是為了彌補簡單工廠的缺陷(違反開閉原則)

如果說演算法是程式的靈魂,那麼資料就是程式的核心了,畢竟演算法和程式都需要有資料

情景:運算元據庫

最基本的資料訪問程式

使用者表user

public

class user

public

void

setid(int id)

public

void

setname(string name)

public

intgetid()

public string getname()

@override

public string tostring() ';

}}

資料庫操作類

public

class sqlserveruser

public

void

getuser()

}

呼叫:這裡的問題在於如果我要更換乙個db類,並且在insert時不用去考慮當前用的是哪乙個db很麻煩,下面看我們用工廠方法來實現

user user=new user(1,"蓋倫");

sqlserveruser su=new sqlserveruser();

su.insert(user);

su.getuser();

工廠的方式實現

用書資料表類

public

class user

public

void

setid(int id)

public

void

setname(string name)

public

intgetid()

public string getname()

@override

public string tostring() ';

}}

db介面:運算元據庫的介面

public

inte***ce iuser

db實現類:具體的運算元據庫的類

//第乙個db

public

class

accessuser

implements

iuser

public

void

getuser()

}

//第二個db

public

class

sqlserveruser

implements

iuser

public

void

getuser()

}

工廠規範類

public

inte***ce ifactory

具體的工廠

public

class

accessfactory

implements

ifactory

}public

class

sqlserve***ctory

implements

ifactory

}

呼叫:利用工廠方法和多型的特性達到了上面的需求

ifactory ifactory= new sqlserve***ctory();

iuser iuser = ifactory.createuser();

iuser.insert(user);

iuser.getuser();

「工廠模式」 2

3.4 工廠方法 有了簡單工廠模式後,已經給我們帶來了一些好處,但是還存在一些問題,如果我們又多了乙個影像家電產品mp4之後,我們可以使mp4類從videowiring派生,但是卻要修改create類的 使它能夠生產出mp4這個產品來。不好的地方就在於,我們每次多乙個產品的時候都需要修改create...

工廠模式 2

解決方案 1 簡單工廠來解決 用來解決上述問題的乙個合理的解決方案就是簡單工廠,那麼什麼是簡單工廠呢?1 簡單工廠定義 2 應用簡單工廠來解決的思路 分析上面的問題,雖然不能讓模組外部知道模組內的具體實現,但是模組內部是可以知道實現類的,而且建立介面是需要具體實現類的。那麼乾脆在模組內部新建乙個類,...

設計模式2 工廠模式

定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。型別 建立型模式 類圖 工廠方法模式 inte ce iproduct class product implements iproduct inte ce ifactory class factory ...