python适配器模式角色_Python设计模式(四) ——适配器模式

适配器模式

我们的手机需要3.6V或者5V的电源来进行充电,但是我们家里面插座使用的电源一般是220V的交流电.所以我们需要手机充电器作为一个适配器来进行电源的转换.

对应到代码中适配器(Adapter)是对于两个不同的接口之间的桥梁

类图

构建者模式的类图如下所示:

plantuml代码如下

使用的puml代码如下

skinparam monochrome true

"Director" o-- "Builder"

"Builder"

"ConcreteBuilder" ..> Product : << create >>

class Director{

builder: Builder

construct()

}

class Builder{

builderPart()

}

class ConcreteBuilder{

builderPart()

getResult() :Product

}

上面的类图中各个部分的作用如下:

Director类提供了构造的函数

Builder提供了创造project的接口

ConcreteBuilder是实际的Builder

例子

代码

Director类

import ABC

# Director

class Director(object):

def __init__(self):

self.builder = None

def construct_building(self):

self.builder.new_building()

self.builder.build_floor()

self.builder.build_size()

def get_building(self):

return self.builder.building

Builder类

# Abstract Builder

class Builder(object):

__metaclass__ = ABCMeta

def __init__(self):

self.building = None

def new_building(self):

self.building = Building()

@ABC.abstractmethod

def build_floor(self):

raise NotImplementedError

@ABC.abstractmethod

def build_size(self):

raise NotImplementedError

两个ConcreteBuilder类

# Concrete Builder

class BuilderHouse(Builder):

def build_floor(self):

self.building.floor = 'One'

def build_size(self):

self.building.size = 'Big'

class BuilderFlat(Builder):

def build_floor(self):

self.building.floor = 'More than One'

def build_size(self):

self.building.size = 'Small'

Product类

# Product

class Building(object):

def __init__(self):

self.floor = None

self.size = None

def __repr__(self):

return 'Floor: {0.floor} | Size: {0.size}'.format(self)

使用例子

if __name__ == "__main__":

director = Director()

director.builder = BuilderHouse()

director.construct_building()

building = director.get_building()

print(building)

director.builder = BuilderFlat()

director.construct_building()

building = director.get_building()

print(building)

类图

puml代码

skinparam monochrome true

"Director" o-- "Builder"

"Builder"

"Builder"

"BuilderHouse" ..> Building : << create >>

"BuilderFlat" ..> Building : << create >>

class Director{

builder: Builder

construct()

}

class Builder{

builderPart()

}

优点&缺点

优点

同一个Product类实际上可以是不同的东西(取决于ConcreteBuilder)

封装了构造和表示的代码

控制了构建的过程

缺点

需要为每个project提供一个单独的ConcreteBuilder类

需要builder类是可变的

规则

creational的模式都是可以互补的,在使用一种模式的时候,你也可以使用别的,例如把builder模式和单例模式结合使用

Builder模式最重要的意义是针对复杂的初始化过程.抽象工厂强调的是产品的系列.Builder最后一步才返回对象,但是一旦抽象工厂实现了,对象马上就能返回

通常,设计的开始会使用工厂模式(简单,个性,易于子类的扩展)但是随着面对需求的复杂会专向抽象工厂,Prototype或者是builder模式,这两种模式更加灵活同事也更加复杂.

注:

所有的设计模式相关的代码都在这里这也是从别的地方看到的,关于builder模式的部分写与文中的内容基本相同,可以直接参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值