Python Design Pattern
NasonYehfm
對程式開發抱有高度熱忱,現主攻Python編程之研發
展开
-
結構型模式--代理模式
代理模式之使用场景:可提高對现有实际对象的安全性:一般不允许客户端直接访问实际对象,这是因为实际对象可能會受到恶意活动的危害,此时使用代理可作為抵御恶意活动的盾牌作用以保护实际对象。 可为使用远程对象提供本地接口:以本地作為远程对象之緩存,一般會将客戶端请求先行交给本地代理对象來處理,之后如有需要可再转交该请求由远程机器上來执行。 可为消耗大量内存的对象提供轻量级句柄:因有时候可能不想加载...原创 2019-05-02 06:15:18 · 141 阅读 · 0 评论 -
创建型模式--建造者模式
當欲创建一个由多个部分組成的对象,而且它的构成需要依序完成,此時使用建造者(Builder)模式正是最佳的解決方案,利用此模式可将一个复杂对象的构造过程与其表现完全分离,且同一个构造过程可以产生多个不同的表现,这种需求存在于许多应用開發中,如HTML页面生成器、文档转换器以及UI表单创建工具等場合。示例:以建造者模式定制电脑各部份之構建過程class Computer: ...原创 2019-05-14 16:36:05 · 109 阅读 · 0 评论 -
创建型模式--工厂模式
將对象的创建可独立於某定制类來進行,客户端无需了解创建对象如何被创建,只需知道要传递的接口、方法、参数就能够创建所需类型的对象,日後可轻松地在工厂中再添加其它类型以创建对象,而无需更改客户端代码。工广模式主要分类:简单工厂模式:定義統一工广並提供訪問接口,並對傳入參數進行需求對象之创建,此式通常用於一次创建單一實例之場合中。 工厂方法模式:定義抽象工广並提供共用訪問接口並讓其繼承具...原创 2019-05-09 22:58:05 · 183 阅读 · 0 评论 -
結構型模式--适配器模式
适配器模式(Adapter pattern)是用來实现不兼容接口之间的轉換媒介,例如想把舊组件用于新系统或把新组件用于老系统中,一般若不对代码进行任何修改使两者就能够通信的情况則很少见,但修改代码又不切实际或可能无法直接访问这些代码(*组件是第三方以外部库方式提供),此時可编写一个额外的代码层來让新舊接口之间能够交互通信,这个代码层就是适配器。示例:class Synthesizer...原创 2019-05-10 10:32:47 · 108 阅读 · 0 评论 -
行為型模式--桥接模式
将需求分离各部份使它们可各自独立变化,之後再透过接口传递参数來引用以实现调用以達到解耦之目的,如將手机依软件和品牌作分类以便降低耦合程度,再讓两种分类以方法透過參數傳遞來引用以最終組合手機之整体需求,此桥接模式可讓需求分离成各分类以可獨自变化且不影响其他分类以降低耦合程度。UML类图:示例:#!/usr/bin/env python# -*- coding:utf-8 -...原创 2019-05-15 11:20:33 · 123 阅读 · 0 评论 -
行為型模式--责任链模式
责任链(Chain of Responsibility)模式用于让多个对象可来处理单个请求之情況,其運作原则如下所示:存在一个对象链(如直链表、树或任何其他数据结构)。 客戶端将请求发送给链中的第一个对象。 某一对象可决定是否处理该请求,若無則将请求转发给下一对象,重复此过程直到链尾。對客户端之請求仅需要知道如何与链的起始节点处理元素进行通信即可,而不須拥有处理元素的所有引用,但每...原创 2019-05-07 21:05:54 · 119 阅读 · 0 评论 -
結構型模式--裝饰器模式
在應用開發中如果欲对一个创建对象再度添加额外的功能時,一般則有下面这些可选的不同方法:将功能直接添加到此对象所属的类中,如添加一个新的方法 使用组合方式將另一含新功能之對象加入此對象中 使用继承方式再於子類中新增功能如与继承相比,通常应该优先选择组合方式,因为继承关系是静态的,其应用會擴及整个类以及这个类的所有实例。除此之外,修饰器模式可为我们提供第四种可选方法,此模式可支持运行时...原创 2019-05-11 08:21:42 · 128 阅读 · 0 评论 -
行為型模式--中介者模式
用於封装一系列同事对象交互通信之中間媒介,此模式可使各同事对象不需要以显式直接作交互作用,从而使其達到解耦之目的,并可容易日後來改变它们之间的交互,一般应用於一组同事对象已被良好定义但須以复杂方式來进行交互通信之场合中。类图:示例: #!/usr/bin/env python# -*- coding:utf-8 -*-Import abcclass Mediator(...原创 2019-05-16 11:25:10 · 112 阅读 · 0 评论 -
行為型模式--访问者模式
此模式一般作用於数据结构中對各元素之操作,它可使在不改变各元素的前提下重新定义作用于这些元素的新操作,故可将数据結构與数据处理解耦,讓数据結构只提供数据处理的接口,此数据結构的处理者便是访问者,日後只要数据结构要面临不同处理的结果时,只需要创建不同的访问者即可。UML类图: 示例:# encoding=utf-8import abcclass Program: #基于数...原创 2019-05-16 15:26:51 · 93 阅读 · 0 评论 -
行為型模式--迭代器模式
迭代器(Iterator)模式主要分离集合的遍历行为並抽象出一个迭代器类来负责模式之運作,这样既可以做到不暴露集合内部结构,又可以让外部可透明访问集合内部的数据,当需要对集合結構作不同遍历时便可考虑使用此模式。UML类图:示例:#!/usr/bin/env python#! _*_ coding:UTF-8 _*_from abc import ABCMeta, abstra...原创 2019-05-17 10:45:47 · 149 阅读 · 0 评论 -
创建型模式--原型模式
原型(Prototype)模式主要用於创建对象的克隆,通常其最简单的形式就是採用自定clone()函数並傳入对象参数以返回此对象的一个副本,這在Python實作上可使用內定copy.copy()或copy.deepcopy()函数来達到此目的。当已有一个对象但對此对象的某些部分会被变更卻又想保持原有对象不变之部份时,此時便可利用此对象的副本來進行改造,這就可採用原型模式來協助開發工作,因...原创 2019-05-14 15:23:42 · 106 阅读 · 0 评论 -
行為型模式--模板方法模式
模板方法模式(*IoC反向呼叫之概念)定義多个接口之抽象类,可讓繼承不同子类來实现其接口以達到不同操作行為,且依需求設計模板方法調用必要接口轉而反向呼叫(IoC)子類實作之方法,此有助于减少代码之重用且可避免重复工作,另可達到多態設計的弱引用。UML类图AbstractCls抽象類: 定义操作步驟之各接口,这些接口必須被不同具体子类來實作之其行為,而tmplate_metho...原创 2019-05-05 16:48:14 · 127 阅读 · 0 评论 -
用設計模式改善軟件設計
一、什麼是設計模式設計模式使得人們可以更加方便地去發展成功的軟件設計,從而能夠幫助設計者更好地完成系統設計。設計模式通常是對於某一類軟件設計問題提供可重用的解決方案,最終目標就是幫助人們利用軟件設計師的集體經驗來設計出更加優秀的軟件,我們只要搞清楚這些設計模式,就可以完全或者說很大程度上吸收了那些蘊含在模式中的寶貴經驗,從而對軟件體系結構有了比較全面的了解,實際工作中一旦遇到具有相同背景的...原创 2019-04-30 12:25:40 · 235 阅读 · 0 评论 -
结构型模式-组合模式
组合模式(Composite)是用于將目前对象視為整体而把要納入協同作業之其它对象(*可能為一個或一组)視為部份,此種模式會依树形结构来表現其組織层次,在此树型结构下客户端可透過對目前對象之处理即可操控其下組織之組成對象,實作上整体對象只要提供接口供外界來調用(*通常定義在抽象基類中),且内部須配有list型態之集合属性來存放部份對象(*通常定義在繼承之具体子類中),在使用场景上只要須具備树...原创 2019-04-30 15:11:08 · 130 阅读 · 0 评论 -
行為型模式--迭代器模式
迭代器模式(Iterator)用于依序遍歷访问集合对象的每一元素,但不暴露集合對象的内部结构,只允許让外部來访问集合内部的数据,在實作上通常會抽象出一个迭代器类並含有hasNext()及 next()之接口定义,再由其繼承具体子類負責集合对象的遍历行为之功能。示例:from abc import ABCMeta, abstractmethodclass Iterator(obje...原创 2019-05-01 06:33:02 · 104 阅读 · 0 评论 -
結構型模式--門面模式
门面设计模式 主要目的是提供统一子系統的高级接口,用单一接口来表示复杂的子系统,实际上它并不是封装子系统,而是对底层子系统功能进行必要组合,再将客户端的请求透過此接口再委托给包含在其下之相应子系统來處理(*即处理门面所分配的工作)。UML图客户端只要与门面作交互,这样就可以轻松地与子系统进行通信并完成工作。 示例:# -*- ...原创 2019-05-02 13:13:24 · 91 阅读 · 0 评论 -
結構型模式--观察者模式
定义对象间具有一对多的依赖关系,使得當主对象有任何變化時則發出通知給其它依赖对象,此模式可對關注的核心主题對象(*即依賴對象)進行再次封装。常見之應用场景如下:分布式系统中实现事件之服务。 新闻机构的框架。 股票市场。UML图:主题Subject類:主要負責引入ConcreteObserver具体類作為關注對象,故須提供注册/注銷方法以可對ConcreteObserver...原创 2019-05-03 10:25:14 · 205 阅读 · 0 评论 -
行為型模式--命令模式
简介以請求作為主導角色對封装完成一项操作(如撤销、重做、复制、粘贴等)或在觸发一个事件(如滑鼠單擊、雙擊等)时執行所需行為,简而言之,这意味着创建一个命令类來包含该操作/事件所需的逻辑動作並由請求主導該命令之執行。之後客戶端就可下達請求來調用此命令類以執行。 可將调用与执行命令的对象解耦,调用者无需知道命令的任何实现细节。 亦可組合命令,如在实现一个多层撤销命令时,此在應用中非...原创 2019-05-03 14:13:02 · 113 阅读 · 0 评论 -
行為型模式--状态模式
重點着力於对象交互时状态之变化,本质上相当於实现一个状态机来解决特定领域的一个软件问题,状态机有两个关键部分:状态和转换,其中状态是指系统当前状况;转换則指因某个事件或条件的触发而从一个状态切换到另一个状态,此通常會在一次转换发生之前或之后执行某些动作。UML图狀態State抽象類:声明对象行为之接口,而行为要与目前对象的状态相关联。 狀態ConcreateStateA/Con...原创 2019-05-05 10:02:02 · 103 阅读 · 0 评论 -
创建型模式--单例模式
使用机制:确保類只會被创建一个对象,一般會提供一个全局访问点讓程序可访问该对象,通常使用於共享资源的并行访问之控制,如常見於日志记录、数据库操作、印表机后台处理程序之場合中,此處值得一提的是Python所有的模块也都是採用单例模式使用於應用程序開發中。示例:# encoding: utf-8class Singleton(object): #单例模式...原创 2019-05-09 13:09:13 · 95 阅读 · 0 评论 -
创建型模式--享元模式
享元(Flyweight)模式为相似对象引入数据共享以最小化使用内存,即可提供状态独立不可变之数据共享对象以促使提升性能。由於享元主旨在数据共享和优化内存性能,故對嵌入式系统(如手机、平板电脑和微控制器等)與性能具切切关键的应用(游戏、3D图形处理和实时系统等)都能从其获益,一般在應用開發上要使用享元模式,通常需满足以下几个条件:當应用需要使用大量的对象。 當有多組对象則储存或渲染它们...原创 2019-05-14 11:33:46 · 114 阅读 · 0 评论 -
行為型模式--备忘录模式
备忘录(Memento)模式可在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象外保存这个状态,如此之后就可将该对象恢复到原先保存的状态。UML类图:Originator(起始者):负责创建一个Memento备忘录用以记录当前时刻之内部状态,Originator可根据需求來决定Memento要储存那些内部状态,以讓日後可使用备忘录來恢复内部状态。 Memento(备忘录)...原创 2019-05-17 11:42:21 · 158 阅读 · 0 评论