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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 实现原型设计模式

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

原型設(shè)計(jì)模式主要在當(dāng)新建一個(gè)對(duì)象的時(shí)候,覺得很麻煩,并且你又要保留當(dāng)前對(duì)象。在這種情況下使用原型設(shè)計(jì)模式是一個(gè)很好的解決辦法。

例如你寫一個(gè)東西更新,不同的版本,這個(gè)時(shí)候以前的版本肯定要保留,并且從此基礎(chǔ)上進(jìn)行迭代,這個(gè)時(shí)候你就需要新建一個(gè)副本進(jìn)行二次編寫或者開發(fā),進(jìn)行新功能編寫。

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

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

開始

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

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

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個(gè)類成員變量:

  • volume 用來描述裝水的體積
  • packing 用來描述包裝水的物體用什么
  • name 表示不同的型號(hào)包裝,不同型號(hào)會(huì)導(dǎo)致印刷不一樣

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

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

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

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個(gè)方法,一個(gè)為初始化 __init__ 方法,一個(gè)為 assembly_line (流水線)方法。__init__ 方法中定義了原型,assembly_line 方法實(shí)現(xiàn)了原型復(fù)制。

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

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

測(cè)試代碼:

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

運(yùn)行結(jié)果:

結(jié)果發(fā)現(xiàn)原型并未改變,符合需求。
完整代碼:

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(['礦泉水卡通版', '礦泉水程序員版', '礦泉水產(chǎn)品經(jīng)理版']) f.assembly_line()

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。