第五天:结构型模式--适配器模式
时间:2022-07-24
本文章向大家介绍第五天:结构型模式--适配器模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
零、结构型模式
从现在开始就进入到了第二个模式大类结构型模式。所谓结构型模式就是处理一个系统中不同实体(例如类和对象)之间的关系,关注的是通过一种简单的对象组合方式来创造新的功能。 常见的结构型模式有:适配器模式、修饰器模式、外观模式、享元模式、模型-视图-控制器模式和代理模式
一、适配器模式
- 什么是适配器模式 帮助我们实现两个不兼容的接口之间的兼容
二、身边的例子
- Iphone7/8/X/P 众所周知在Iphone6sp以及以前型号的Iphone手机所使用的而耳机是3.5毫米的耳机,但是如果在7以后的版本上就无法使用,所以各个商家看准了商机,生产了适配器,让3.5毫米的耳机也能在高版本手机上使用。
- Traits Traits是Python的第三方包,通过适配器将没实现的某个接口的对象转换成已经实现了的接口。
三、什么情况下使用
- 存在一个老的系统,需要对老系统进行扩展,但又要不能改动老系统
- 扩展一个第三方系统的组建
四、应用案例
通过一个模拟操作计算机的例子来看看适配器模式怎么使用 external.py
class Synthesizer:
def __init__(self, name):
self.name = name
def __str__(self):
return "the {} synthesizer".format(self.name)
def play(self):
return 'is playing an electronic song'
class Human:
def __init__(self, name):
self.name = name
def __str__(self):
return '{} the human'.format(self.name)
def speak(self):
return 'says hello'
adapter.py
from .external import Synthesizer, Human
class Computer:
def __init__(self, name):
self.name = name
def __str__(self):
return 'the {} computer'.format(self.name)
def execute(self):
return 'executer a program'
class Adapter:
def __index__(self, obj, adapted_methods):
self.obj = obj
self.__dict__.update(adapted_methods)
def __str__(self):
return str(self.obj)
def main():
objects = [Computer('Asus')]
synth = Synthesizer('moog')
objects.append(Adapter(synth, dict(execute=synth.play)))
human = Human('Bob')
objects.append(Adapter(human, dict(execute=human.speak)))
for i in objects:
print('{} {}'.format(str(i), i.execute()))
if __name__ == "__main__":
main()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 技术篇-日志定期清理设置,自动清理上个月的日志实例演示
- python 技术篇-日志模块自定义时间格式
- 恕我直言你可能真的不会java第12篇-如何使用Stream API对Map元素排序
- JavaScript错误处理完全指南
- 从头创建您自己的vue.js——第4部分(构建反应性)
- Oracle 数据库-服务器端字符集查看方法
- Pywinauto 应用后端类型选择错误:AttributeError: 'NoneType' object has no attribute 'backend'. 原因及解决办法
- 恕我直言你可能真的不会java第11篇-Stream API终端操作
- Python+selenium 自动化-滚动的使用方法,如何滚动到元素的位置
- 恕我直言你可能真的不会java第10篇-集合元素归约
- Python+selenium 自动化-模拟键盘输入、点击操作,如何查看所支持的全部键位名称
- Uber为什么放弃Postgres选择迁移到MySQL?
- BAT 批处理命令 - 文件批量复制、克隆功能实例演示
- 【35期】谈谈你对Java线程之间通信方式的理解
- mac 技术篇-修改hosts文件,hosts文件位置