在使用工廠單列模式時,若是使用工廠產生的物件都繼承了工廠的話會出現以下的錯誤(只展示正確的**):
yesinit factory
基礎演算法
<__main__.compute***ctory object at 0x02ad2870>
<__main__.compute***ctory object at 0x02ad2870>
<__main__.compute***ctory object at 0x02ad2870>
<__main__.compute***ctory object at 0x02ad2870>
所有的物件都是同乙個,工廠產生的物件還是工廠本身,所以繼承應該是繼承父類,在工廠外面而不是工廠本身
class compute***ctory:__obj = none
__init_flag = true
#工廠def creat_computer(self, com):
if com == "聯想":
return lx()
elif com == "華碩":
return hs()
elif com == "神州":
return sz()
else:
return "位置品牌無法建立"
#單例def __new__(cls, *args, **kwargs):
if cls.__obj == none:
cls.__obj = object.__new__(cls)
return cls.__obj
def __init__(self):
if compute***ctory.__init_flag:
print("init factory")
compute***ctory.__init_flag = false
#父類class computer:
def calculate(self):
print("基礎演算法")
class lx(computer):
print("yes")
def calculate(self):
print("lx演算法")
class hs(computer):
def calculate(self):
print("hs演算法")
class sz(computer):
def calculate(self):
print("sz演算法")
def comcalculate(a):
if isinstance(a, compute***ctory):
a.calculate()
'''若是在使用工廠單列模式時,工廠所產生的物件都是繼承工廠類的話
會導致工廠產生的物件都是乙個。這樣導致過載的方法沒用,只有父類即工廠的方法有用.
所以在實際使用中只能寫乙個基礎電腦類繼承該電腦類。
'''factory = compute***ctory()
c1 = factory.creat_computer("聯想")
c2 = factory.creat_computer("華碩")
factory2 = compute***ctory()
c1.calculate()
print(factory)
print(factory2)
print(c1)
print(c2)
單例模式 工廠模式
單例模式 一 什麼是單例模式 有時候我們會遇到這樣一種情況,乙個類只能有乙個物件被例項化,這時我們就可以使用單例模式了。單例模式通過類本身來管理其唯一例項。在設計這個類的時候,讓他只能建立乙個例項並提供對此例項的全域性訪問。因此單例模式有兩個最基本的條件是,確保乙個類只有乙個例項被建立,提供乙個對例...
工廠模式 單例模式
一.單例模式介紹 單例類只能有乙個例項。單例類必須自己建立自己的唯一例項。單例類必須給所有其他物件提供這一例項。二.單例模式分為 4 雙重檢驗 這是最優的執行緒安全 即使用於單執行緒又適用於多執行緒 第乙個進來的時候,判斷為空,然後加鎖,繼續判斷為空,如果開闢了空間之後,還沒有去賦值,這時候有其他執...
單例模式 工廠模式
單例 package com.enorth.user public class singleton public static singleton getinstance return singleton 簡單工廠 產品介面 public inte ce product 具體產品a public c...