5-4 设计模式:结构型模式Python应用面试题
Posted WinvenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5-4 设计模式:结构型模式Python应用面试题相关的知识,希望对你有一定的参考价值。
一、结构型模式常考题
常见结构型设计模式
1.装饰器模式(Decorator
):无需子类化扩展对象功能
2.代理模式(Proxy
):把一个对象的操作代理到另一个对象
3.适配器模式(Adapter
):通过一个间接层䢪配统一接口
4.外观模式(Facade
):简化复杂对象的访问问题
5.享元模式(Flyweight
):通过对象复用(池)发送资源利用,比如连接池
6.Model-View-Controller(MVC)
:解耦展示逻辑和业务逻辑
二、代理模式
什么是代理模式(Proxy
)
1.把一个对象的操作代理到另一个对象
2.这里又要提到我们之前实现的Stack
/Queue
,把操作代理到 deque
3.通常使用 has-a
组合关系
# 之前这段代码是代理模式
from collections import deque
class Stack:
def __init__(self):
self.items = deque()
def push(self, val):
return self.items.append(val)
def pop(self):
return self.items.pop()
def empty(self):
return len(self.items) == 0
三、适配器模式
什么是适配器模式(Adapter
)
1.把不同的对象的接口适配到同一个接口
2.想象一个多功能充电头,可以给不同的电器充电,充当了适配器
3.当我们需要给不同的对象统一接口的时候可以使用适配器模式
代码示例
# 适配器模式
class Dog:
def __init__(self):
self.name = 'Dog'
def bark(self):
return 'woof!'
class Cat:
def __init__(self):
self.name = 'Cat'
def meow(self):
return 'meow!'
class Adapter:
def __init__(self, obj, **adapted_methods):
"""we set the adapted methods in the object's dict"""
self.obj = obj
self.__dict__.update(adapted_methods)
def __getattr__(self, attr):
"""all non-adapted calls are passed to the object"""
return getattr(self.obj, attr)
objects = []
dog = Dog()
objects.append(Adapter(dog, make_noise=dog.bark))
cat = Cat()
objects.append(Adapter(cat, make_noise=cat.meow))
for obj in objects:
print('A {0} goes {1}'.format(obj.name, obj.make_noise()))
运行结果:
小练习:请你尝试使用适配器模式 完成充电头的例子
以上是关于5-4 设计模式:结构型模式Python应用面试题的主要内容,如果未能解决你的问题,请参考以下文章