python使用工廠單例模式 繼承容易犯的錯誤

2021-10-02 19:08:39 字數 1732 閱讀 5920

在使用工廠單列模式時,若是使用工廠產生的物件都繼承了工廠的話會出現以下的錯誤(只展示正確的**):

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...