首页 优德88下载正文

w88优德手机版_优德88官方手机版登陆_w88官方网站手机版

admin 优德88下载 2019-05-20 340 0

示例代码

咱们运用一个挨近日子的比如来阐明拜访者形式。假设有一个小区,居民家里一般都会装置电表、水表,部分家里会装置煤气表。

# 电表

class ElecMeter:

# 抄表

def read(self):

return random.randint(100, 300)

# 查看

def check(self):

return random.randint(0, 1)

# 替换

def replace(self):

print('ElecMeter replaced.')

# 承受拜访者

def accept(self, visitor):

visitor.visit_e_meter(self)

# 水表

class WaterMeter:

# 抄表

def read(self):

return random.randint(10, 50)

# 查看

def check(self):

return random.randint(0, 1)

# 替换

def replace(self):

print('WaterMeter replaced.')

# 承受拜访者

def accept(self, visitor):

visitor.visit_w_meter(self)

# 煤气表

class GassMeter:

# 抄表

def read(self):

return random.randint(5, 10)

# 查看

def check(self):

return random.randint(0, 1)

# 修补

def repair(self):

print('GassMeter repaired.')

# 承受拜访者

def accept(self, visitor):

visitor.visit_g_meter(self)

上述各类别离是电表类ElemMeter,水表类WaterMeter和煤气表类GassMeter。由所以示例代码,它们的结构大部分相同,都支撑抄表,查看和承受拜访者功用;不同的是水表和电表支撑替换,而煤气表只支撑修补。由所以示例代码,一切计量表的返回值都由随机数发生。

class Home:

def __init__(self,e_meter, w_meter, g_meter):

self.e_meter= e_meter

self.w_meter= w_meter

self.g_meter= g_meter

def accept(self, visitor):

if self.e_meter:

self.e_meter.accept(visitor)

if self.w_meter:

self.w_meter.accept(visitor)

if self.g_meter:

self.g_meter.accept(visitor)

房子类Home作为载体,办理电表,水表和煤气表的信息。当拜访者入户拜访时,担任将调用各计量表的accept接口以接收拜访者visitor。每个类中实践调用的函数由中各类的accept办法决议。

class MeterReader:

def __init__(self):

self.e_value= 0

self.w_value= 0

self.g_value= 0

# 抄电表

def visit_e_meter(self, e_meter):

self.e_value= self.e_value + e_meter.read()

# 抄水表

def visit_w_meter(self, w_meter):

self.w_value= self.w_value + w_meter.read()

# 抄煤气表

def visit_g_meter(self, g_meter):

self.g_value= self.g_value + g_meter.read()

# 输出成果

def __str__(self):

ret = 'e_value:'+ str(self.e_value)+ '\n'

ret = ret + 'w_value:' + str(self.w_value)+ '\n'

ret = ret + 'g_value:' + str(self.g_value) + '\n'

return ret

抄表员类MeterReader的责任便是读取一切计量表的读数值并汇总。

# 修补师傅

class MeterRepairMan:

def __init__(self):

self.repair_counter= 0

# 查看,替换电表

def visit_e_meter(self, e_meter):

ifnot e_meter.check():

e_meter.replace()

self.repair_counter= self.repair_counter + 1

# 查看,替换水表

def visit_w_meter(self, w_meter):

ifnot w_meter.check():

w_meter.replace()

self.repair_counter= self.repair_counter + 1

# 查看,修补煤气表

def visit_g_meter(self, g_meter):

ifnot g_meter.check():

g_meter.repair()

self.repair_counter= self.repair_counter + 1

# 输出成果

def __str__(self):

return 'repaircounter:' + str(self.repair_counter)

修补师傅会别离查看电表、水表、煤气表的状况,假如出现问题,就进行替换或修补。

if __name__ == '__main__':

# 构建住宅区

homes =[]

homes.append(Home(ElecMeter(),WaterMeter(), GassMeter()))

homes.append(Home(ElecMeter(), WaterMeter(),None))

# 抄表

mr =MeterReader()

for hin homes:

h.accept(mr)

print(mr)

# 检修

mrm =MeterRepairMan()

for hin homes:

h.accept(mrm)

print(mrm)

上述代码首要构建了一个两户居民的小区,然后别离承受了抄表员和检修师傅的拜访,其履行成果如代码 4‑62所示。因为代码中运用了随机数,因而每次成果都会不同。

e_value:395

w_value:52

g_value:6

ElecMeter replaced.

WaterMeter replaced.

GassMeter replaced.

ElecMeter replaced.

repair counter:4

只需决议了拜访者类和要素类之间的联系,就可以依据需求添加具象拜访者类的类型,关于恣意数据结构进行拜访。


觉得本文有协助?请共享给更多人。

重视【面向对象考虑】,轻松学习每一天!

有任何疑问,欢迎留言发问或评论。

面向对象规划,面向对象编程,面向对象考虑!

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

最近发表

    w优德88com_w88优德官方网站_w88优德娱乐中文版

    http://www.sodokusha.com/

    |

    Powered By

    使用手机软件扫描微信二维码

    关注我们可获取更多热点资讯

    w88出品