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应用面试题的主要内容,如果未能解决你的问题,请参考以下文章

Python常用的设计模式

Python常用的设计模式

Python常用的设计模式

Python常用的设计模式

5-5 设计模式:行为型模式Python应用面试题

数据库笔试题2