python设计模式(Python设计模式(第2版))

网友投稿 604 2022-08-29


python设计模式(Python设计模式(第2版))

def __delattr__(self, name): """ Remove non-slot field attribute. """ try: del self._attrs[name] except KeyError: raise AttributeError(name) def __str__(self): return "%s.%s" % (self.model_name, self.name) def __repr__(self): return "%s.%s" % (self.model_name, self.name)

一、 建造者模式

想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成。只有当各个部分都创建好,这个对象才是完整的。这时就需要建造者模式

建造者设计模式:将一个复杂对象的构造过程与其表现分离,构造过程可用于创建多个不同的表现。

该模式中有两个参与者:建造者和指挥者

建造者负责创建复杂对象的各个组成部分。

指挥者使用建造者实例控制建造的过程。

1.工厂模式以单个步骤创建对象,而建造者模式以多个步骤创建独享,并且几乎始终使用同一个指挥者;

2.在工厂模式下,会立即返回一个创建好的对象;而在建造者模式下,仅在需要时客户端代码才显示地请求指挥者返回最终的对象。

1. 建造者模式的苹果电脑应用案例

类里面套一个类,这种写法可以禁止直接实例化一个类的简洁方式

一个苹果电脑的例子,制造商将所有的硬件规格都隐藏了起来,客户只知道去买某个品牌和型号的笔记本

可以看到只有​​AppleFactory​​类实例化, 但生产的其他参数都隐藏了起来,无法直接实例化生产过程​​MacMini14​​类 过程的参数,让购买者无需关心内部生产的过程

# 设计模式MINI14 = '1.4GHZ MAC MINI'class AppleFactory: class MacMini14: def __init__(self): self.menory = 8 self.hdd = 500 self.gpu = 'Inter HD Graphics 5000' def __str__(self): info = ( 'Model:{}'.format(MINI14), 'Memory:{}'.format(self.menory), 'Hard Disk:{}'.format(self.hdd), 'Graphics Card: {}'.format(self.gpu)) return '\n'.join(info) def build_computer(self,model): if (model==MINI14): return self.MacMini14() else: print("i dont know how to build {}".format(model)) if __name__=='__main__': afac=AppleFactory() mac_mini=afac.build_computer(MINI14) print (mac_mini)

工厂模式和建造者模式的区别

工厂模式以单个步骤创建对象,创建者模式以多个步骤创建对象,并且几乎始终会使用一个指挥者。在工厂模式下,会立即返回一个创建好的对象;而在建造者模式下,仅在需要时客户端代码才显示地请求指挥者返回最终的对象

2. 案例二:作为指挥者向制造商提供指令,制作想要的电脑

首先实例化​​HardwareEngineer​​,调用并传参​​construct_computer(self, memory, hdd, gpu)​​,再去实例化​​ComputerBuilder()​​--> ​​Computer()​​

列表式执行函数

[step for step in (self.builder.configure_momory(memory), self.builder.configure_hdd(hdd), self.builder.configure_gpu(gpu))]

class Computer: def __init__(self, serial_number): self.serial = serial_number self.memory = None # 单位为GB self.hdd = None # 单位为GB self.gpu = None def __str__(self): info = ('Memory: {}GB'.format(self.memory), 'Hard Disk: {}GB'.format(self.hdd), 'Graphics Card: {}'.format(self.gpu)) return '\n'.join(info)class ComputerBuilder: def __init__(self): self.computer = Computer('AG23385193') def configure_momory(self, amount): self.computer.memory = amount def configure_hdd(self, amount): self.computer.hdd = amount def configure_gpu(self, gpu_model): self.computer.gpu = gpu_modelclass HardwareEngineer: def __init__(self): self.builder = None def construct_computer(self, memory, hdd, gpu): self.builder = ComputerBuilder() [step for step in (self.builder.configure_momory(memory), self.builder.configure_hdd(hdd), self.builder.configure_gpu(gpu))] @property def computer(self): return self.builder.computerdef main(): engineer = HardwareEngineer() engineer.construct_computer(hdd=500, memory=8, gpu='GeForce GTX 650 Ti') computer = engineer.computer print(computer)if __name__ == '__main__': ''' 通过HardwareEngineer(传参调用ComputerBuilder,可以使用其他类也可以) --> ComputerBuilder --> Computer(负责打印输出数据) ''' main()

# 设计模式MINI14 = '1.4GHZ MAC MINI'class AppleFactory: class MacMini14: def __init__(self):self.menory = 8self.hdd = 500self.gpu = 'Inter HD Graphics 5000'def __str__(self):info = ('Model:{}'.format(MINI14),'Memory:{}'.format(self.menory),'Hard Disk:{}'.format(self.hdd),'Graphics Card: {}'.format(self.gpu))return '\n'.join(info)def build_computer(self,model): if (model==MINI14): return self.MacMini14()else:print("i dont know how to build {}".format(model))if __name__=='__main__':afac=AppleFactory() mac_mini=afac.build_computer(MINI14)print (mac_mini)

心有猛虎,细嗅蔷薇


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java接口回调的本质详解
下一篇:流畅的python学习1(小白轻松学python)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~