日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 实现原型设计模式

發布時間:2023/12/4 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 实现原型设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原型設計模式主要在當新建一個對象的時候,覺得很麻煩,并且你又要保留當前對象。在這種情況下使用原型設計模式是一個很好的解決辦法。

例如你寫一個東西更新,不同的版本,這個時候以前的版本肯定要保留,并且從此基礎上進行迭代,這個時候你就需要新建一個副本進行二次編寫或者開發,進行新功能編寫。

在我理解,設計模式是一種設計思想、解決方案,并不局限于固定的代碼編寫方式,只要符合于該思想即可,所以代碼的實現只是一個實現樣例,并不是唯一答案。畢竟條條道路通北京,怎么走還是得看你自己。

想要完全的從實際業務上考慮代碼設計所使用的設計模式,需要豐富的項目編寫(業務邏輯處理)經驗,所以在此并不多舉例應用場景,畢竟你也有可能把一個原型模式玩出了花。

開始

以下例子用一個礦泉水生產不同的外觀進行舉例。
礦泉水生產,同一個類型可能有不同包裝版本。體積容量、包裝樣式可能一致,不同版本可能外表印刷顏色不同。

首先寫一個類(為了方便新手,以下會說明代碼釋義,完整代碼在最下面):

class MineralWater:volume = '' # 體積packing = '' # 包裝用瓶子name = '' # 顏色def __init__(self, name,volume,packing):self.name = nameself.volume = volumeself.packing = packingdef set_name(self, name):self.name = namedef get_name(self):return self.namedef get_volume(self):return self.volumedef get_packing(self):return self.packing

類名為 MineralWater(礦泉水),有3個類成員變量:

  • volume 用來描述裝水的體積
  • packing 用來描述包裝水的物體用什么
  • name 表示不同的型號包裝,不同型號會導致印刷不一樣

類中一共有5個方法,初始化一個,其余方法為成員變量的存取方法:

  • __init__ 方法用來初始化原型,接收參數為 name,volume以及packing
  • set_name 方法用來設置name 變量
  • get_name 方法用來取得name 變量
  • 其他方法是存取方法,不再贅述

再建一個工廠類:(這個類其實可以不用,不過為了方便說明,再次還是寫一下。讀者只需要了解其中關鍵代碼即可

class Factory:def __init__(self, name):self.name = nameself.mwater = MineralWater('礦泉水卡通版',555,"plastic_bottle") # 原型def assembly_line(self):#工廠裝配for v in self.name:mwater_ = copy(self.mwater)mwater_.set_name(v)print('已裝配 ', mwater_.get_name(),' 礦泉水,容量為 ' ,mwater_.get_volume(), ',包裝為:' + mwater_.get_packing())print('\n原型并未被改變: ', self.mwater.get_name(),' 礦泉水,容量為 ' ,self.mwater.get_volume(), ',包裝為:' + self.mwater.get_packing())

Factory(工廠類)中有2個方法,一個為初始化 __init__ 方法,一個為 assembly_line (流水線)方法。__init__ 方法中定義了原型,assembly_line 方法實現了原型復制。

在 __init__ 初始化方法中接收一個產品型號說明變量 name作為參數,由于之后需要遍歷這個參數,所以該參數應該設置為列表或者是元組;并且在name進行設置后,定義了一個原型對象 mwater,mwater為卡通版,容量為555毫升,包裝使用 plastic_bottle (塑料瓶)。

在 assembly_line流水線方法中,遍歷了傳入的列表或者元組成員數據name,每一次遍歷使用 mwater_ = copy(self.mwater) 復制一個對象(copy需要引入:from copy import copy),并且使用 mwater_.set_name(v) 設置新的對象name值**(這個v為傳入的不同版本的名稱)**,隨后使用print進行輸出,每次其它相同值并不需要重新設置,只需要改變不同的值即可。最后輸出原型對象查看其數據是否被改變。

測試代碼:

f = Factory(['礦泉水卡通版', '礦泉水程序員版', '礦泉水產品經理版']) f.assembly_line()

運行結果:

結果發現原型并未改變,符合需求。
完整代碼:

from copy import copyclass MineralWater:volume = '' # 體積packing = '' # 包裝用瓶子name = '' # 顏色def __init__(self, name,volume,packing):self.name = nameself.volume = volumeself.packing = packingdef set_name(self, name):self.name = namedef get_name(self):return self.namedef get_volume(self):return self.volumedef get_packing(self):return self.packingclass Factory:def __init__(self, name):self.name = nameself.mwater = MineralWater('礦泉水卡通版',555,"plastic_bottle") # 原型def assembly_line(self):#工廠裝配for v in self.name:mwater_ = copy(self.mwater)mwater_.set_name(v)print('已裝配 ', mwater_.get_name(),' 礦泉水,容量為 ' ,mwater_.get_volume(), ',包裝為:' + mwater_.get_packing())print('\n原型并未被改變: ', self.mwater.get_name(),' 礦泉水,容量為 ' ,self.mwater.get_volume(), ',包裝為:' + self.mwater.get_packing())f = Factory(['礦泉水卡通版', '礦泉水程序員版', '礦泉水產品經理版']) f.assembly_line()

總結

以上是生活随笔為你收集整理的python 实现原型设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。