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

歡迎訪問 生活随笔!

生活随笔

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

python

python创建角色_Python Design Pattern - 4.创建型模式

發(fā)布時間:2023/12/8 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python创建角色_Python Design Pattern - 4.创建型模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

#!/usr/bin/env python

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

# @Time : 2020/11/29 18:06

# @Author : Antenna

# @Email : lilyef2000@163.com

# @File : creationalpatterns.py

# 1.簡單工廠型模式

# 簡單工廠模式不直接向客戶端暴露對象創(chuàng)建

# 的細節(jié),而是通過一個工廠類來負責創(chuàng)建產(chǎn)品類的實

# 例。簡單工程模式的角色有:工廠角色、抽象產(chǎn)品角

# 色、具體產(chǎn)品角色

from abc import ABCMeta, abstractmethod

# 抽象產(chǎn)品角色,以什么樣的表現(xiàn)去使用

class Payment(metaclass=ABCMeta):

@abstractmethod

def pay(self, money):

pass

# 產(chǎn)品角色

class Alipay(Payment):

def __init__(self,use_huabei=False):

self.use_huabei = use_huabei

def pay(self, money):

if self.use_huabei == True:

print("花唄支付了{0}元!".format(money))

else:

print("支付寶余額支付了{0}元!".format(money))

# 產(chǎn)品角色

class WechatPay(Payment):

def pay(self, money):

print("微信支付了%d元!" % (money))

# 工廠類角色

class PaymentFactory:

def ctreate_payment(self, method):

if method == 'Alipay':

return Alipay()

elif method == 'WechatPay':

return WechatPay()

elif method == 'HuabeiPay':

return Alipay(use_huabei=True)

else:

raise TypeError('No such payment named% s' % method)

# 客戶端調(diào)用。不直接向客戶端暴露對象創(chuàng)建的實現(xiàn)

# 細節(jié),而是通過一個工廠類來負責創(chuàng)建產(chǎn)品類的實例

pf = PaymentFactory()

p = pf.ctreate_payment('HuabeiPay')

p.pay(100)

# 2.工廠方法模式

# 工廠模式方法模式的概念是定義了一個用于創(chuàng)建對

# 象的接口(工廠接口),讓子類決定實例化那一個產(chǎn)品

# 類。角色有抽象工廠角色、具體工廠角色、抽象產(chǎn)品角

# 色和具體產(chǎn)品角色。

from abc import ABCMeta, abstractmethod

# 抽象產(chǎn)品角色

class Payment(metaclass=ABCMeta):

@abstractmethod

def pay(self, money):

pass

# 產(chǎn)品角色

class Alipay(Payment):

def __init__(self, use_huabei=False):

self.use_huabei = use_huabei

def pay(self, money):

if self.use_huabei == True:

print("花唄支付了{0}元!".format(money))

else:

print("支付寶支付了{0}元!".format(money))

# 產(chǎn)品角色

class WechatPay(Payment):

def pay(self, money):

print("微信支付了{0}元!".format(money))

# 抽象工廠角色

class PaymentFactory(metaclass=ABCMeta):

@abstractmethod

def create_payment(self):

pass

# 具體工廠角色

class AlipayFactory(PaymentFactory):

def create_payment(self):

return Alipay()

class WechatPayFactory(PaymentFactory):

def create_payment(self):

return Alipay()

class HuabeiFactory(PaymentFactory):

def create_payment(self):

return Alipay(use_huabei=True)

hfp = HuabeiFactory().create_payment()

hfp.pay(100) # 花唄支付了100元!

# 缺點是每增加一個具體產(chǎn)品類,就必須增加一個相應的具體方法

# 3.抽象工廠模式

# 定義一個工廠類的接口讓工廠子

# 類來創(chuàng)建一系列相關或者相互依賴的對象 。相比工廠方法

# 模式,抽象工廠模式中的每一個具體工廠都生產(chǎn)一套產(chǎn)

# 品 。抽象工廠模式的角色有:抽象工廠角色、具體

# 工廠角色、抽象產(chǎn)品角色、具體產(chǎn)品角色和客戶端。抽

# 象工廠模式的優(yōu)點是:將客戶端和類的具體實現(xiàn)相分

# 離;每個工廠創(chuàng)建了一個完整的產(chǎn)品系列 ,使得易于交

# 換產(chǎn)品系列;有利于產(chǎn)品的一致性,即產(chǎn)品之間的約束

# 關系。缺點是:難以支持新種類抽象產(chǎn)品 。

from abc import ABCMeta, abstractmethod

# ------抽象的產(chǎn)品------

class PhoneShell(metaclass=ABCMeta):

@abstractmethod

def show_shell(self):

pass

class PhoneCPU(metaclass=ABCMeta):

@abstractmethod

def show_cpu(self):

pass

class PhoneOS(metaclass=ABCMeta):

@abstractmethod

def show_os(self):

pass

# ------具體的產(chǎn)品------

class SmallShell(PhoneShell):

def show_shell(self):

print('普通手機小手機殼')

class BigShell(PhoneShell):

def show_shell(self):

print('普通手機大手機殼')

class AppleShell(PhoneShell):

def show_shell(self):

print('蘋果手機殼')

class SnapDragonCPU(PhoneCPU):

def show_cpu(self):

print('驍龍CPU')

class HuaweiCPU(PhoneCPU):

def show_cpu(self):

print('化為CPU')

class AppleCPU(PhoneCPU):

def show_cpu(self):

print('蘋果CPU')

class AndroidOS(PhoneOS):

def show_os(self):

print('IOS系統(tǒng)')

class AppleOS(PhoneOS):

def show_os(self):

print('安卓系統(tǒng)')

# ------抽象的工廠------

class PhoneFactory(metaclass=ABCMeta):

@abstractmethod

def make_shell(self):

pass

@abstractmethod

def make_cpu(self):

pass

@abstractmethod

def make_os(self):

pass

# ------具體的工廠------

class HuaweiFactory(PhoneFactory):

def make_shell(self):

return SmallShell()

def make_cpu(self):

return HuaweiCPU()

def make_os(self):

return AndroidOS()

class AppleFactory(PhoneFactory):

def make_shell(self):

return AppleShell()

def make_cpu(self):

return AppleCPU()

def make_os(self):

return AppleOS()

# ------客戶端------

class Phone:

def __init__(self, shell, cpu, os):

self.shell = shell

self.cpu = cpu

self.os = os

def show_info(self):

print('手機信息:')

self.shell.show_shell()

self.cpu.show_cpu()

self.os.show_os()

def make_phone(factory):

shell = factory.make_shell()

cpu = factory.make_cpu()

os = factory.make_os()

return Phone(shell, cpu, os)

p = make_phone(HuaweiFactory())

p.show_info()

# 4.建造者模式

# 建造者模式是將一個復雜對象的構建與它的表

# 示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。角

# 色有抽象創(chuàng)建者、具體創(chuàng)建者、指揮者和產(chǎn)品。建造者

# 模式與抽象工廠模式相似,也用來創(chuàng)建復雜的對象。主

# 要區(qū)別是 建造者模式著重一步步構造一個復雜對象(控制

# 順序)。而抽象工廠模式著重于多個系列的產(chǎn)品對象

from abc import ABCMeta, abstractmethod

# ------產(chǎn)品------

class Player:

def __init__(self, face=None, body=None, arms=None, legs=None):

self.face = face

self.body = body

self.arms = arms

self.legs = legs

def __str__(self):

return '%s,%s,%s,%s' % (self.face, self.body, self.arms, self.legs)

# ------抽象建造者------

class PlayerBuilder(metaclass=ABCMeta):

@abstractmethod

def build_face(self):

pass

@abstractmethod

def build_body(self):

pass

@abstractmethod

def build_arms(self):

pass

@abstractmethod

def build_legs(self):

pass

# ------具體建造者,隱藏了一個產(chǎn)品的內(nèi)部結構------

class GirlBuilder(PlayerBuilder):

def __init__(self):

self.player = Player()

def build_face(self):

self.player.face = '漂亮的臉蛋'

def build_body(self):

self.player.body = '苗條的身材'

def build_arms(self):

self.player.arms = '細細的胳膊'

def build_legs(self):

self.player.legs = '大長腿'

# ------具體建造者,表示代碼------

class MonsterBuilder(PlayerBuilder):

def __init__(self):

self.player = Player()

def build_face(self):

self.player.face = '綠臉'

def build_body(self):

self.player.body = '魁梧的身體'

def build_arms(self):

self.player.arms = '粗壯的胳膊'

def build_legs(self):

self.player.legs = '粗壯的大腿'

# ------指揮者,構造代碼(構造代碼和表示代碼分開),可以對構造過程進行更加精細地控制 ------

class PlayerDirectory():

def builder_player(self, builder):

"""隱藏了裝配過程:param builder::return:"""

builder.build_face()

builder.build_body()

builder.build_arms()

builder.build_legs()

return builder.player

# ------客戶端------

builder = GirlBuilder()

director = PlayerDirectory()

p = director.builder_player(builder)

print(p)

# 5.單例模式

# 單例模式保證一個類只有一個實例,并提供一

# 個訪問它的全局訪問點。優(yōu)點是對唯一實例的受控訪問

# (只有一個實例),單例相當于全局變量,但防止了命

# 名空間被污染(變量命名不會有沖突)。

class Singleton:

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

if not hasattr(cls, "_instance"):

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

return cls._instance

class MyClass(Singleton):

def __init__(self, a):

self.a = a

ms1 = MyClass(1)

ms2 = MyClass(2)

# print(ms1.a)

# print(id(ms1), id(ms2))

# 該例子在python3.6中不能成功運行,其實python中可以通過導入模塊實現(xiàn)單實例運行.

總結

以上是生活随笔為你收集整理的python创建角色_Python Design Pattern - 4.创建型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美成人黄色 | 欧美黑粗大| 国产精品黑人一区二区三区 | 亚洲黄色一区 | 男生操女生在线观看 | 亚洲综合无码一区二区 | 国产美女自拍视频 | 日韩在线欧美在线 | 美女大黄网站 | 欧美用舌头去添高潮 | 色久影院 | 毛片毛片女人毛片毛片 | youjizz麻豆| 中文字幕av久久爽一区 | 久久久久一区二区 | 爱情岛av永久入口 | 东方成人av在线 | 日本黄色录像 | 日本免费电影一区二区三区 | 91精品国产色综合久久不卡蜜臀 | 毛片视频免费播放 | 精品日韩一区二区三区四区 | 爆操白虎逼 | www.日韩av| 无码任你躁久久久久久久 | 亚洲免费观看高清完整 | 少妇高潮淫片免费观看 | 国产精品日本一区二区在线播放 | 97国产精东麻豆人妻电影 | 女人叫床很黄很污句子 | 摸摸大奶子 | 天天操人人爽 | 欧美色图校园春色 | 欧美一区二区三区四区五区六区 | 91国视频 | 欧美理伦片在线播放 | 特黄特色特刺激免费播放 | 97青草| 日韩欧美中文字幕在线播放 | 国产aa | 日韩中文字幕高清 | 香蕉视频在线观看网站 | 免费看60分钟黄视频 | jizzjizz美国| 亚洲av无码乱码国产精品久久 | 无码精品人妻一区二区三区漫画 | 九九午夜 | 精品一区二区免费视频 | 麻豆成人91精品二区三区 | 啪视频网站 | 欧美黄色小说视频 | 黄色小视频在线观看 | 九九热视频在线播放 | 在线看亚洲 | 日产精品久久久久 | 67194午夜| 一区二区三区波多野结衣 | 亚洲欧美韩国 | 国产三级午夜理伦三级 | 手机看片日韩欧美 | 哺乳期给上司喂奶hd | 另类专区成人 | 波多野吉衣久久 | 欧洲精品无码一区二区 | av无码精品一区二区三区 | 精品女厕偷拍一区二区 | 黄色网在线| 欧美精品一区二区三区久久久竹菊 | 色婷婷av久久久久久久 | 少妇无内裤下蹲露大唇视频 | 天天操天天拍 | 久久久久久福利 | 欧美a在线看 | 成人av手机在线观看 | 欧美一区二区三区久久综合 | 亚洲天堂男人av | 福利网站在线观看 | 黄色免费版 | 华人永久免费视频 | 国产无套精品 | 亚洲第一页中文字幕 | 国产精品美女久久久久图片 | 久久橹| 亚洲一区二区三区四区av | 黄色网页在线免费观看 | 久久精品黄aa片一区二区三区 | 中文字幕人妻丝袜乱一区三区 | 制服 丝袜 综合 日韩 欧美 | 日韩欧美高清在线视频 | 亚洲激情a | 日韩欧美高清在线视频 | 91免费在线播放 | 成人免费看片' | 国产精品久久久久久免费 | 日本一区二区不卡在线观看 | 日本在线不卡一区二区 | 99热在线免费 | 日本三级免费看 | av三级|