python设计模式之门面模式
2017-11-21 22:33
288 查看
一、理解结构型设计模式
1.结构型模式描述如何将对象和类组合成更大的结构
2.结构型模式是一种能够简化设计工作的模式,因为它能够找出更简单的方法来认识或表示实体之间的关系。在面向对象世界中,实体指的是对象或类。
3.类模式可以通过继承来描述抽象,从而提供更有用的程序接口,而对象模式则描述了如何将对象联系起来从而组成更大的对象。结构型模式是类和对象模式的综合体。
二、理解门面设计模式
1.它为子系统中的一组接口提供一个统一的接口,并定义一个高级接口来帮助客户用过简单的方式使用子系统。
2.门面所解决问题是,如何用单个接口对象来表示复杂的子系统。实际上,他并不是封装子系统,而是对底层子系统进行组合。
三、UML图
1. 门面:门面的主要责任是将一组复杂的系统封装起来,从而为外面世界提供一个舒适的外观
1.1 它是一个接口,它知道某个请求可以交由哪个子系统进行处理。
1.2 它使用组合将客户端的请求委托给相应的子系统对象。
2. 系统:这代表一组不同的子系统,使整个系统混杂在一起,难以观察或使用。
2.1 它实现子系统的功能,同时,系统由一个类表示。理想情况下,系统应该由一组负责不同的任务的类来表示。
2.2 它处理门面对象分配的工作,但并不知道门面,而且不引用它。
3. 客户端:客户端与门面交互,这样就可以轻松地与子系统进行通信并完成工作了。不必担心系统的复杂性。
3.1 客户端是实例化门面的类。
3.2 为了让子系统完成相应的工作,客户端需要向门面提出请求。
四、例子
五、最少知识原则
最少知识原则:减少对象之间的交互。
1.在设计系统是,对于创建的每个对象,都应该考察与之狡猾的类的逻辑,以及交互的方式。
2.遵循这个原则,就能够避免创建许多彼此紧密耦合的类的情况。
3.如果类之间存在大量依赖关系,那么系统就会变得难以维护。如果对系统中的任务一部分进行修改,都可能导致系统的其他部分被无意改变,这意味着系统会退化, 是应该被避免的。
六、常见问答
1. 迪米特法则是什么,它与工厂模式有何关联?
1.1 迪米特法则:
1.1.1 每个单元对系统中其他单元知道的越少越好。
1.1.2 单元应该只与朋友交流。
1.1.3 单元不应该知道它操作的对象的内部细节。
1.2 最少知识原则和迪米特法则是一致的,都是指向送耦合理论。就像他的名称暗示的那样,最少知识原则适用于门面模式的用例,并且“原则”这个词是指导方针的意 思,不是严格遵守的意思,并且只有在修的时候采用。
2. 子系统可以有多个门面吗?
一组子系统组件实现多个门面
3. 最少知识原则的缺点是什么?
门面提供了一个简化的接口供客户端与子系统交互。本着提供简化接口的精神应用可能会建立多个不必要的接口,这增加了系统的复杂性并且降低了运行时的性能。
4. 客户端可以独立访问子系统吗?
是的,实际上,由于门面模式提供了简化的接口,这使得客户端不必担心系统的复杂性。
5. 门面是否可以添加自己的功能?
门面可以将其“想法”添加到子系统中,例如确保子系统的改进顺序由门面来jued
本系列项目代码地址:Python-design-pattern
1.结构型模式描述如何将对象和类组合成更大的结构
2.结构型模式是一种能够简化设计工作的模式,因为它能够找出更简单的方法来认识或表示实体之间的关系。在面向对象世界中,实体指的是对象或类。
3.类模式可以通过继承来描述抽象,从而提供更有用的程序接口,而对象模式则描述了如何将对象联系起来从而组成更大的对象。结构型模式是类和对象模式的综合体。
二、理解门面设计模式
1.它为子系统中的一组接口提供一个统一的接口,并定义一个高级接口来帮助客户用过简单的方式使用子系统。
2.门面所解决问题是,如何用单个接口对象来表示复杂的子系统。实际上,他并不是封装子系统,而是对底层子系统进行组合。
三、UML图
1. 门面:门面的主要责任是将一组复杂的系统封装起来,从而为外面世界提供一个舒适的外观
1.1 它是一个接口,它知道某个请求可以交由哪个子系统进行处理。
1.2 它使用组合将客户端的请求委托给相应的子系统对象。
2. 系统:这代表一组不同的子系统,使整个系统混杂在一起,难以观察或使用。
2.1 它实现子系统的功能,同时,系统由一个类表示。理想情况下,系统应该由一组负责不同的任务的类来表示。
2.2 它处理门面对象分配的工作,但并不知道门面,而且不引用它。
3. 客户端:客户端与门面交互,这样就可以轻松地与子系统进行通信并完成工作了。不必担心系统的复杂性。
3.1 客户端是实例化门面的类。
3.2 为了让子系统完成相应的工作,客户端需要向门面提出请求。
四、例子
# -*- coding: UTF-8 -*- # 门面类 class EventManager(object): def __init__(self): print("Event Manager: Let me talk to the folks") def arrage(self): self.hotelier = Hotelier() # 酒店类 self.hotelier.bookHotel() # 检查当天是不是由免费的酒店 self.florist = Florist() # 鲜花类 self.florist.setFlowerRequirements() # 用于指定要使用哪种画来装饰婚礼 self.caterer = Caterer() # 宴席承办人类 self.caterer.setCuisine() # 指定酒店的饭菜类型 self.musician = Musician() # 婚礼音乐类 self.musician.setMusicType() #音乐要求 # 事件 class Hotelier(object): def __init__(self): print("安排酒店结婚? --") def __isAvilable(self): print("免费就结,不免费不结了?") return True def bookHotel(self): if self.__isAvilable(): print("给老子订一间房") # 事件 class Florist(object): def __init__(self): print("鲜花事件") def setFlowerRequirements(self): print("九十九朵浪漫的玫瑰吧") # 事件 class Caterer(object): def __init__(self): print("宴席承办人事件") def setCuisine(self): print("中国菜和印度菜将被提供") # 事件 class Musician(object): def __init__(self): print("婚礼音乐事件") def setMusicType(self): print("播放《今天你要嫁给我》") # 事件 class You(object): def __init__(self): print("你:婚礼安排") def askEventManager(self): print("你:让我和活动经理联系下") em = EventManager() em.arrage() def __del__(self): print("感谢你活动经历,所有东西都安排妥当了") you = You() you.askEventManager()
五、最少知识原则
最少知识原则:减少对象之间的交互。
1.在设计系统是,对于创建的每个对象,都应该考察与之狡猾的类的逻辑,以及交互的方式。
2.遵循这个原则,就能够避免创建许多彼此紧密耦合的类的情况。
3.如果类之间存在大量依赖关系,那么系统就会变得难以维护。如果对系统中的任务一部分进行修改,都可能导致系统的其他部分被无意改变,这意味着系统会退化, 是应该被避免的。
六、常见问答
1. 迪米特法则是什么,它与工厂模式有何关联?
1.1 迪米特法则:
1.1.1 每个单元对系统中其他单元知道的越少越好。
1.1.2 单元应该只与朋友交流。
1.1.3 单元不应该知道它操作的对象的内部细节。
1.2 最少知识原则和迪米特法则是一致的,都是指向送耦合理论。就像他的名称暗示的那样,最少知识原则适用于门面模式的用例,并且“原则”这个词是指导方针的意 思,不是严格遵守的意思,并且只有在修的时候采用。
2. 子系统可以有多个门面吗?
一组子系统组件实现多个门面
3. 最少知识原则的缺点是什么?
门面提供了一个简化的接口供客户端与子系统交互。本着提供简化接口的精神应用可能会建立多个不必要的接口,这增加了系统的复杂性并且降低了运行时的性能。
4. 客户端可以独立访问子系统吗?
是的,实际上,由于门面模式提供了简化的接口,这使得客户端不必担心系统的复杂性。
5. 门面是否可以添加自己的功能?
门面可以将其“想法”添加到子系统中,例如确保子系统的改进顺序由门面来jued
本系列项目代码地址:Python-design-pattern
相关文章推荐
- 设计模式-门面模式-facade-python
- Python设计模式之门面模式简单示例
- python 设计模式之门面模式
- Python Selenium设计模式-POM
- 设计模式-结构型模式,python桥接模式
- 写给Python初学者的设计模式入门
- 设计模式-门面模式
- 设计模式-迭代器模式-iterator-python
- 设计模式-门面模式
- 【设计模式】观察者模式(observer)c#/python实现
- Python中的设计模式
- python设计模式之模板方法
- [Python模块学习]copy模块,设计模式中的原型模式
- Python设计模式——观察者模式
- Python设计模式(8)-抽象工厂
- 设计模式之一Template Method介绍以及以及基于python的代码展示
- 设计模式:门面模式
- 分析Python中设计模式之Decorator装饰器模式的要点
- 研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)
- 举例分析Python中设计模式之外观模式的运用