欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python設計模式之裝飾模式實例詳解

 更新時間:2019年01月21日 14:27:15   作者:Andy冉明  
這篇文章主要介紹了Python設計模式之裝飾模式,結合實例形式詳細分析了裝飾模式的概念、原理并結合Python實例形式分析了裝飾模式的相關使用技巧,需要的朋友可以參考下

本文實例講述了Python設計模式之裝飾模式。分享給大家供大家參考,具體如下:

裝飾模式(Decorator Pattern):動態(tài)的給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活.

下面是一個給人穿衣服的過程,使用裝飾模式:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設計模式
設計模式——裝飾模式
裝飾模式(Decorator Pattern):動態(tài)的給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活.
特點: 有效的把類的核心職責和裝飾功能區(qū)分開,而且可以去除相關類中重復的裝飾邏輯
"""
# 定義對象接口
class Person(object):
  def __init__(self,name):
    self.name = name
  def show(self):
    print "裝扮的%s"%self.name
#裝飾類
class Finery(Person):
  def __init__(self):
    pass
  def Decorate(self,componet):
    self.componet = componet
  def show(self):
    if self.componet != None:
      self.componet.show()
#裝扮——T恤
class TShirts(Finery):
  def __init__(self):
    pass
  def show(self):
    print 'T恤'
    self.componet.show()
#裝扮——大褲衩
class BigTrouser(Finery):
  def __init__(self):
    pass
  def show(self):
    print '大褲衩'
    self.componet.show()
# 裝扮——人字拖
class FlipFlops(Finery):
  def __init__(self):
    pass
  def show(self):
    print '人字拖'
    self.componet.show()
if __name__ == '__main__':
  p = Person('Andy')
  ff = FlipFlops()
  bt = BigTrouser()
  ts = TShirts()
  ff.Decorate(p)
  bt.Decorate(ff)
  ts.Decorate(bt)
  ts.show()

運行結果:

T恤
大褲衩
人字拖
裝扮的Andy

這幾個類的設計如下圖:

通過一個個繼承自裝飾類Finery的對象,實現(xiàn)給Person類賦予職責的功能,Person類并不會感知Finery的存在

更多關于Python相關內容可查看本站專題:《Python數(shù)據(jù)結構與算法教程》、《Python Socket編程技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 關于Java中RabbitMQ的高級特性

    關于Java中RabbitMQ的高級特性

    這篇文章主要介紹了關于Java中RabbitMQ的高級特性,MQ全稱為Message Queue,即消息隊列,"消息隊列"是在消息的傳輸過程中保存消息的容器,它是典型的:生產(chǎn)者、消費者模型,生產(chǎn)者不斷向消息隊列中生產(chǎn)消息,消費者不斷的從隊列中獲取消息,需要的朋友可以參考下
    2023-07-07
  • Python設計模式之狀態(tài)模式原理與用法詳解

    Python設計模式之狀態(tài)模式原理與用法詳解

    這篇文章主要介紹了Python設計模式之狀態(tài)模式原理與用法,簡單描述了狀態(tài)模式的概念、原理并結合實例形式分析了Python實現(xiàn)與使用狀態(tài)模式的相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • pandas數(shù)據(jù)篩選和csv操作的實現(xiàn)方法

    pandas數(shù)據(jù)篩選和csv操作的實現(xiàn)方法

    這篇文章主要介紹了pandas數(shù)據(jù)篩選和csv操作的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 一文詳解python多繼承的3C算法

    一文詳解python多繼承的3C算法

    有很多地方都說python多繼承的繼承順序,是按照深度遍歷的方式,其實python多繼承順序的算法,不是嚴格意義上的深度遍歷,而是基于深度遍歷基礎上優(yōu)化出一種叫3C算法,本文將給大家詳細的介紹一下python多繼承的3C算法,需要的朋友可以參考下
    2024-07-07
  • Python實現(xiàn)雙進程防止單點故障實例深度探究

    Python實現(xiàn)雙進程防止單點故障實例深度探究

    在分布式系統(tǒng)中,確保系統(tǒng)的高可用性是至關重要的,本文將深入探討如何使用Python實現(xiàn)雙進程自我保護機制,以應對單點故障,確保系統(tǒng)穩(wěn)定運行,將通過詳實的示例代碼,介紹雙進程自我保護的原理、實現(xiàn)步驟以及可能遇到的挑戰(zhàn)
    2024-01-01
  • PyCharm無法調用numpy(報錯ModuleNotFoundError:No?module?named?'numpy')

    PyCharm無法調用numpy(報錯ModuleNotFoundError:No?module?named?&a

    本文主要介紹了PyCharm無法調用numpy(報錯ModuleNotFoundError:No?module?named?'numpy'),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python使用scrapy采集數(shù)據(jù)過程中放回下載過大頁面的方法

    Python使用scrapy采集數(shù)據(jù)過程中放回下載過大頁面的方法

    這篇文章主要介紹了Python使用scrapy采集數(shù)據(jù)過程中放回下載過大頁面的方法,可實現(xiàn)限制下載過大頁面的功能,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python3基礎之函數(shù)用法

    Python3基礎之函數(shù)用法

    這篇文章主要介紹了Python3的函數(shù)用法,非常重要,需要的朋友可以參考下
    2014-08-08
  • 淺談Tensorflow由于版本問題出現(xiàn)的幾種錯誤及解決方法

    淺談Tensorflow由于版本問題出現(xiàn)的幾種錯誤及解決方法

    今天小編就為大家分享一篇淺談Tensorflow由于版本問題出現(xiàn)的幾種錯誤及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • tensorflow實現(xiàn)對圖片的讀取的示例代碼

    tensorflow實現(xiàn)對圖片的讀取的示例代碼

    本篇文章主要介紹了tensorflow實現(xiàn)對圖片的讀取的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論