設計模式之簡單工廠模式與單例模式

2021-06-25 18:21:55 字數 1662 閱讀 6948

# -*- coding: gbk -*-

# -*- coding: utf-8 -*-

"""這是簡單工廠模式和單例模式的乙個應用場景(參考了《大話設計模式》)。

高質量程式:

簡潔、可維護、可擴充套件、可復用。

此處使用簡單工廠模式實現乙個計算器,在需要修改具體運算類時只需修改相應的那個類,故具

備可維護性;當需要增加新運算方法時只需要新增新的運算類,故具備可擴充套件性;實現好的具體

運算類可被其他程式復用,故具備可復用性。

"""from abc import abcmeta, abstractmethod

#抽象運算類

class operation(object):

__metaclass__ = abcmeta

def __init__(self,numa=none, numb=none):

self.numbera = numa

self.numberb = numb

@abstractmethod

def getresult(self):

pass

#具體運算類,實現具體的運算方法

class addoperation(operation):

def getresult(self):

return (self.numbera + self.numberb)

class muloperation(operation):

def getresult(self):

return (self.numbera * self.numberb)

#運算工廠類,根據輸入的符號產生相應的運算類例項

#此類還使用了單例模式,因為有乙個工廠就夠了

class operationfactory(object):

dic =

_instance = none

def __new__(cls, *args, **kwargs):

if not cls._instance:

cls._instance = super(operationfactory, cls).__new__(

cls, *args, **kwargs)

return cls._instance

def createoperation(cls, operator):

return cls.dic[operator]

#client

if __name__ == '__main__':

operf1 = operationfactory()

# 下面兩行**用於檢驗是否實現了單例模式

# operf2 = operationfactory()

# assert(id(operf1)==id(operf2))

operator = raw_input('請輸入運算符號\n')

opr = operf1.createoperation(operator)

opr.numbera = input('請輸入第乙個運算數\n')

opr.numberb = input('請輸入第二個運算數\n')

result = opr.getresult()

print result

設計模式之簡單工廠和單例模式

1.單例模式 重點就是下面三句話 1.將建構函式私有化 2.提供乙個靜態方法,返回乙個物件 3.建立乙個單例 1建構函式私有化 private form2 2.提供乙個靜態方法,返回乙個物件 3.建立乙個單例 public static form2 f2 null public static for...

設計模式 工廠模式與單例模式

工廠方法模式的用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。工廠模式完全負責設計原則,降低了物件之間的耦合度。很明顯工廠方法模式依賴於抽象的架構,將例項化的任務交由子類去完成,同時也有非常好的拓展性。先寫乙個pizza介面,那麼乙個香噴噴的pizza要做好就需要經過如下四個步驟!...

繼承單例模式 php PHP設計模式之單例模式

單例模式,就是保持乙個物件只存在乙個例項。並且為該唯一例項提供乙個全域性的訪問點 一般是乙個靜態的getinstance方法 單例模式應用場景非常廣泛,例如 資料庫操作物件 日誌寫入物件 全域性配置解析物件 這些場景的共同特徵是從業務邏輯上來看執行期間改物件卻是只有乙個例項 不斷new多個例項會增加...