软件开发基础_设计模式.ppt

上传人:qwe****56 文档编号:69530024 上传时间:2023-01-06 格式:PPT 页数:37 大小:3.18MB
返回 下载 相关 举报
软件开发基础_设计模式.ppt_第1页
第1页 / 共37页
软件开发基础_设计模式.ppt_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《软件开发基础_设计模式.ppt》由会员分享,可在线阅读,更多相关《软件开发基础_设计模式.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、设计模式(Designpattern)设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。1设计模式(Designpattern)GoF(“四人帮”GangofFour,指ErichGamma,RichardHelm,RalphJohnson&JohnVlissides四人)的设计模式(1995年出版)是第一次将设计模式提升到理论高度,并将之规范

2、化。提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。2创建型模式.1.AbstractFactory.2提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。2.Builder2将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。3.FactoryMethod.3定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。4.Prototype.3用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。5.Singleton.3保证一个类仅有一个实例,并提供一个访问它的全局访问点结构

3、型模式.1.Adapter.4将一个类的接口转换成客户希望的另外一个接口。2.Bridge.4将抽象部分与它的实现部分分离,使它们都可以独立的变化。3.Composite.5将对象组合成树形结构以表示“部分-整体”的层次结构。4.Decorator.5动态地给一个对象添加一些额外的职责。5.Fa?ade.6为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。6.Flyweight.6运用共享技术有效地支持大量细粒度的对象。7.Proxy.7为其它对象提供一种代理以控制对这个对象的访问。3行为模式.1.ChainofResponsibi

4、lity.7使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。2.Command.7将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。3.Interpreter.8给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语句中的句子。4.Iterator8提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。5.Mediator8用一个中介对象来封装一系列的对象交互。6.Memento.9在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态

5、。7.Observer9定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。8.State.9允许一个对象在其内部状态改变时改变它的行为。9.Strategy.10定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。10.TemplateMethod.10定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。11.Visitor.10表示一个作用于某对象结构中的各元素的操作。本文来自CSDN博客:http:/ 观察者模式观察者模式观察者模式(有时又被称为发布/订阅模式)是软体设计模式的一种。在此种模式中,一个目标物件管理所有相依于它

6、的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来事件处理系统。Java和c#的事件处理机制就是采用此种设计模式。6 观察者模式观察者模式观察者模式观察者模式7气象监控应用系统概观气象监控应用系统概观系统有三个部分:气象站气象站 获取实际气象数据的物理设备气象数据对象气象数据对象 跟踪气象站的数据,并更新布告板布告板布告板 向用户显示当前的目前状况(温度、湿度、气压)或气象统计或天气预报8Weather对象知道如何跟物理气象站联系,取得新的数据。我们的工作是建立一个应用,利用利用Weather对象的数据对象的数据,更新三个布告板更新

7、三个布告板。9有三个布告板,将来可能需要增加新的布告板。10气象站送来的数据类气象站送来的数据类(WeatherData)我们的工作是实现我们的工作是实现measurementsChanged(),好让它更新目前状况、好让它更新目前状况、气象统计和天气预报的气象统计和天气预报的显示布告板。显示布告板。不在乎此方法是如何调用的,只在乎它被调用了。11不用设计模式,仍然能够实现不用设计模式,仍然能够实现public class WeatherData /实例变量声明 public void measurementsChanged()float temp=getTemperature();float

8、 humidity=getHumidity();float pressure=getPressure();currentConditionsDisplay.update(temp,humidity,pressure);statisticsDisplay.update(temp,humidity,pressure);forecastDisplay.update(temp,humidity,pressure);/其它WeatherData方法取得最近的测量值。更新布告板。传入最新的测传入最新的测量值,调用布量值,调用布告板的更新显告板的更新显 示。示。12我们的实现的缺陷在哪里?我们的实现的缺陷在

9、哪里?针对具体的实现编码。如果不修改程序,我们就无法增加或删除其它显示成分。(1)如果是为数不多的布告板还可以,如果有几十个布告板,这样写就很繁琐,采用观察者模式,发布者只需通过一个notifyObservers()就可以完成多个布告板的更新(2)采用设计模式,如果增加一个布告板,布告板只需要向发布者注册一下,发布者的代码不需要更改。符合oo设计原则:找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。不采用设计模式,就没有注册和订阅,当增加一个布告板时,需要更改发布者内部的实现代码。(3)如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用这种设计模式,可以将这种依赖关系弱化,并

10、形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。currentConditionsDisplay.update(temp,humidity,pressure);statisticsDisplay.update(temp,humidity,pressure);forecastDisplay.update(temp,humidity,pressure);针对具体实现编程,导致增加或删除布告板时,必须修改程序。13会会观察者模式会会观察者模式14151617181920观察者模式也称为发布观察者模式也称为发布-订阅模式订阅模式 报社的业务就是出版报纸 向某家报社订阅报纸,只要他们有新报纸出版,

11、就会给 你送来。只要你是他们的用户,你就会一直收到新报纸当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸只要报社还在运营,就会一直有人(或单位)向他们订阅报纸或取消订阅报纸21观察者模式定义观察者模式定义22观察者模式类图观察者模式类图实现观察者模式的一种方法。23设计气象站设计气象站右边三个布告板也应该有一个右边三个布告板也应该有一个“主题主题”指针指向指针指向WeatherData对象,本图未画对象,本图未画出来。出来。24实现气象站实现气象站,主题接口,观察者接口主题接口,观察者接口public interface Subject public void registerObser

12、ver(Observer o);public void removeObserver(Observer o);public void notifyObservers();public interface Observer public void update(float temp,float humidity,float pressure);public interface DisplayElement public void display();需要观察者作为参数。25实现气象数据的实现气象数据的Subject接口的类接口的类public class WeatherData implemen

13、ts Subject private ArrayList observers;private float temperature;private float humidity;private float pressure;public WeatherData()observers=new ArrayList();ArrayList记录观察者。26 public void registerObserver(Observer o)observers.add(o);public void removeObserver(Observer o)int i=observers.indexOf(o);if(

14、i=0)observers.remove(i);public void notifyObservers()for(int i=0;i observers.size();i+)Observer observer=(Observer)observers.get(i);observer.update(temperature,humidity,pressure);27 public void setMeasurements(float temperature,float humidity,float pressure)this.temperature=temperature;this.humidity

15、=humidity;this.pressure=pressure;notifyObservers();/other WeatherData methods here28布告板布告板1的实现显示的实现显示public class CurrentConditionsDisplay implements Observer,DisplayElement private float temperature;private float humidity;private Subject weatherData;public CurrentConditionsDisplay(Subject weatherDa

16、ta)this.weatherData=weatherData;weatherData.registerObserver(this);/注册对象 public void update(float temperature,float humidity,float pressure)this.temperature=temperature;this.humidity=humidity;display();public void display()System.out.println(Current conditions:+temperature+F degrees and +humidity+%h

17、umidity);weatherData供注册或取消注册之用。另外两个布告板的实现非常类似。29为气象站提供动力为气象站提供动力 public class WeatherStation public static void main(String args)WeatherData weatherData=new WeatherData();CurrentConditionsDisplay currentDisplay=new CurrentConditionsDisplay(weatherData);StatisticsDisplay statisticsDisplay=new Statist

18、icsDisplay(weatherData);ForecastDisplay forecastDisplay=new ForecastDisplay(weatherData);weatherData.setMeasurements(80,65,30.4f);weatherData.setMeasurements(82,70,29.2f);weatherData.setMeasurements(78,90,29.2f);模拟新的气象测量。30运行程序运行程序31Java内置的观察者模式内置的观察者模式 java.util包(package)内包含了最基本的Observable类与 Observ

19、er接口,这与我们subject接口和Observer接口很 相似。Java GUI。例如,JButton可以增加或删除倾听者 (listener),例如,ActionListener能倾听在按钮上发生的 动作。这些倾听者就是观察者。JavaBeans。32松耦合的威力松耦合的威力 当两个对象是松耦合的,它们彼此之间能够交互,但是相互了解很少。观察者模式提供了主题主题和观察者观察者之间的松耦合松耦合设计。因为主题只知道观察者实现了某个接口(即Observer接口),主题不需要知道具体观察者是谁、作了些什么或其它任何细节。要增加新的观察者或删除观察者,主题不会受到任何影响,不必修改主题代码。可以

20、独立地复用主题和观察者,它们之间互不影响,即是松耦合的。33松耦合的威力松耦合的威力(续续)由于松耦合设计使得对象间的依赖最小化,所以,由于松耦合设计使得对象间的依赖最小化,所以,我们能够创建柔性的我们能够创建柔性的OOOO系统,应对变化的情况,因为系统,应对变化的情况,因为对象之间的依赖降到了最低。对象之间的依赖降到了最低。涉及的设计原则1、Identifytheaspectsofyourapplicationthatvaryandseparatethemfromwhatstaysthesame.(找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。)在观察者模式的应用场景里变化的部分是

21、Subject的状态和Observer的数量。使用Observer模式可以很好地将这两部分隔离开,我们可以任意改变Observer的数量而不需要去修改Subject,而Subject的状态也可以任意改变,同样不会对其Observer有任何影响。342、Programtoaninterface,notanimplementation.(面向接口编程,而不要面向实现编程。)Subject和Observer都使用接口来实现。Subject只需要跟踪那些实现了IObserver接口的对象,所以其只依赖于IObserver;而所有Observer都通过ISubject接口来注册、撤销、接收通知,所以它们

22、也只依赖于ISubject;所以这是面向接口编程的,这样的实现方式使得Subject和Observer之间完全没有任何耦合。353、Favorcompositionoverinheritance.(优先使用对象组合,而非类继承)观察者模式使用对象组合将Subject和若干observer联系起来。它们之间的关系不是通过类的继承而是在运行时的动态组合。36参考资料:UML和模式应用敏捷软件开发原则、模式与实践HeadFirstDesignPatterns本书通俗易懂。第第15届届JOLT获奖作品,软件图书界的图灵奖。获奖作品,软件图书界的图灵奖。作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店,书中搭配大量的插图(几乎每一页都有图),所以阅读起来生动有趣,不会感觉到昏昏欲睡。作者还利用歪歪斜斜的手写字体,增加“现场感”。精心设计许多爆笑的对白,让学习过程不会太枯燥。还有模式告白节目,将设计模式拟人化成节目来宾,畅谈其内在的一切。适合初学者去看。37

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 财经金融

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁