浅谈Python设计模式 - 外观模式

  声明:本系列文章主要参考《精通Python设计模式》一书,并且参考一些资料,结合自己的一些看法来总结而来。

 外观模式

  外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口。类似现实世界中的电脑,开机按钮可以说就是一个简单的调用接口,帮用户屏蔽了复杂的内部电路。

外观设计模式 -- 有助于隐藏系统的内部复杂性,并且通过一个简化的接口向客户端暴露必要的部分。本质上,外观是在已有复杂系统之上实现的一个抽象层。

  本来想引用书中的例子,但是其整个代码被复杂化,不好理解。然后在网上看到一篇简单易懂的例子。知乎:通俗Python设计模式-- 外观模式

 示例:

  假设我们需要将计算机抽象,并且这个计算机启动仅需两步:调用BIOS和内核,关闭同样只是顺序相反。那么首先我们声明一个 Computer 类,它只提供 start 和 stop 方法供外部调用。

  当然实际上电脑的开机和关机肯定不止这些步骤,假设有很多很多步,那么这时候的外观模式显得更加重要了。只需要调用 Computer的 start 和 stop 方法即可完成开机和关机的功能,而不需要去调用某些方法去开启各个系统,比如文件系统、进程服务系统等。

class Computer(object):
    def __init__(self):
        self.bios = Bios()
        self.kernal = Kernal()
    def start(self):
        for i in (self.bios, self.kernal):
            i.start()
    def stop(self):
        for i in (self.kernal, self.bios):
            i.stop()

  然后我们需要将 Bios 和 Kernal 类声明出来。

class Bios(object):
    def __init__(self):
        pass
    def start(self):
        print(‘bios start ok‘)
    def stop(self):
        print(‘bios stop ok‘)

class Kernal(object):
    def __init__(self):
        pass
    def start(self):
        print(‘kernal start ok‘)
    def stop(self):
        print(‘kernal stop ok‘)

  然后对于用户来讲,当他实例化了一个 computer 对象后,如果需要执行启动操作,只需要调用 computer.start() 即可完成所有启动过程,无需自己逐步的调用 bios 和 kernal 进行启动。如此一来就实现了将复杂逻辑进行封装的目的。

  这其实也是Python一直提倡的封装思想,隐藏一些丑陋的系统,提供API去调用,不用管内部如何实现,只需调用API即可实现相关功能。

  over~~~,参考:https://zhuanlan.zhihu.com/p/24906483,大家也可以去看看,感觉将的很通俗易懂。

原文地址:https://www.cnblogs.com/littlefivebolg/p/9929877.html

时间: 2024-12-26 07:54:50

浅谈Python设计模式 - 外观模式的相关文章

Python设计模式——外观模式

外观模式跟代理模式有点像,都是在client和目标的类之间建一个中间的类,client不直接调用目标的类,而是通过先调用中间类的方法,由中间类来实现怎么调用目标类. 代理模式用这种模式的目的是可以实现client和目标类不直接通信,使他们之间相互独立,这样就比较安全,因为client不知道目标类的存在. 外观模式的目的是通过建立一个中间类,把调用目标类的代码都封装好,例如有时候目标类有很多个,逐一得去调用它们会很麻烦,这样通过中间类封装好的接口,client的调用就好很简单 不适用外观模式的例子

浅谈php设计模式(1)---工厂模式

一.接口继承直接调用 先看看这样一段代码: 1 <?php 2 3 interface db{ 4 function conn(); 5 } 6 7 class dbmysql implements db { 8 public function conn(){ 9 echo "连接到了mysql"; 10 } 11 } 12 13 class dbsqlite implements db{ 14 public function conn(){ 15 echo "连接到了

浅谈python字符串存储形式

http://blog.csdn.net/zhonghuan1992 钟桓 2014年8月31日 浅谈python字符串存储形式 记录一下自己今的天发现疑问并且给出自己现有知识有的回答.长话短说,用过python的人对于 == 和 is 应该不陌生,但是这里我还是介绍一下. ==是用来判断两个东西是否相等,比如: a = 10: b = 10: print(a == b): 输出是true: 再看一个例子: a = [1,2,3]; b = [1,2,3]; c = [1,2,4]; print

浅谈-Java设计模式之动态代理

动态代理模式(Dynamic Proxy Pattern): 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的. 首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的: InvocationHandler该接口唯一方法 invoke(Object proxy, Method method, Object[] args) Object

大话涉及模式Python实现-外观模式

外观模式(Facade Pattern):为子系统中的一组接口提供一个一致界面,此模式定义一个高层接口,使得子系统更加容易使用 下面是一个外观模式的demo: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式--外观模式 8 facade_pattern.py 9 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致

设计模式 - 外观模式(facade pattern) 详解

外观模式(facade pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 外观模式(facade pattern): 提供了一个统一的接口, 用来访问子系统中的一群接口. 外观定义了一个高层接口, 让子系统更容易使用. 外观模式包含三个部分: 1. 子系统: 子类, 单个复杂子类 或 多个子类; 2. 外观(facade)类: 把子系统设计的更加容易使用; 3. 客户: 只需要调用外观类. 与适配器模式(adapter pattern)的

浅谈 Python 的 with 语句

浅谈 Python 的 with 语句 王 生辉 和 李 骅宸2011 年 12 月 02 日发布 WeiboGoogle+用电子邮件发送本页面 3 引言 with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What's new in Python 2.6? 中 with 语句相关部分介绍).with 语句适用于对资源

浅谈 Python 程序和 C 程序的整合

源地址:http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/ 概览 Python 是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问,对媒体文件的访问等.而作为软件开发的传统编程语言—— C 语言,却能在这些问题上很好地弥补 Python 语言的不足.因此,本文通过实例研究如何在 Python 程序中整合既有的 C 语言模块,包括用 C 语言

设计模式 外观模式 一键电影模式

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是为了方便客户的使用,把一群操作,封装成一个方法. 举个例子:我比较喜欢看电影,于是买了投影仪.电脑.音响.设计了房间的灯光.买了爆米花机,然后我想看电影的时候,我需要