第8章 软件设计原则与模式.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第八章软件设计原则与模式本章内容8.1模式概述8.2软件设计原则8.3创建型设计模式8.4结构型设计模式8.5行为型设计模式研究并使用设计模式的意义大型系统的构建日益复杂,这对人们在软件开发过程的设计、实现与维护等阶段对软件复用性的要求也越来越高。设计一个质量良好的企业级软件系统往往存在较大难度。软件工程师们必须通过需求分析获取需求规格说明书,并从中挖掘对象、分类归纳、设计相应的接口,同时整理出系统功能列表及非功能列表以生成系统用例图,并辅以合理的委托关系。通常,软件架构师的设计方案是针对当前系统需求而具体进行的,但从长期系统运行与升级、维护角度来看,设计本身应当拥有适应需求延伸的能力。好的系统设计可以避免重复设计带来的项目进度拖期、时间滞后和成本提高等问题。8.1模式概述模式:“每一个模式描述了一个在我们身边一再发生的问题,它告诉我们这个问题的解的关键,以使得你能够多次利用这个解,而不需要再一次去求解它。”模式概述设计模式导论案例(1)模式概述设计模式导论案例(2)模式概述设计模式导论案例(3)模式概述设计模式导论案例(4)模式概述设计模式导论案例(5)模式概述对一个软件设计模式的刻画包括多个要素:(1)模式名称(2)问题(3)解决方案(4)模式的别名(5)适用性(6)结构模式概述对一个软件设计模式的描述包括多个要素:(7)参与者(8)合作(9)影响(10)实现(11)示例(12)已知应用(13)相关模式模式概述三种不同层次的模式:架构模式(ArchitecturalPattern)设计模式(DesignPattern)成例(Idiom),即代码模式模式概述ErichGamma等人撰写的《设计模式》一书总结出常用的三大类型,共23种设计模式包括:创建型设计模式,如工厂方法(FactoryMethod)模式、抽象工厂(AbstractFactory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式等。结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式、适配器(Adapter)模式等。行为型设计模式,如模板方法(TemplateMethod)模式、观察者(Observer)模式、迭代子(Iterator)模式、责任链(ChainofResponsibility)模式、备忘录(Memento)模式、命令(Command)模式、状态(State)模式、访问者(Visitor)模式、中介者(Mediator)模式、策略(Strategy)模式、解释器(Interpreter)模式等。模式概述MVC模式是“Model-View-Controller”的缩写,中文译为“模式-视图-控制器”,是一种架构模式。模式概述软件体系结构、模式与框架之间的关系:如果把一种软件体系结构比作一种建筑风格,比如巴洛克建筑风格。那么架构模式就可以理解成是如何构建具备这一类风格建筑的全局建设思路和建设理念,而设计模式就是搭建符合该风格建筑的局域组件的建设思路和建设理念。框架就等于是事先按照一定设计模式指定的思路搭建好的半成品。8.2软件设计原则软件设计原则是软件设计领域中的高层理论,而设计模式对这些抽象的概念和表述加以具体化,形成了软件设计领域中的中层理论。开闭原则指出:“一个软件实体应当对扩展开发,对修改关闭。”里氏代换原则指出:“当一个子类的实例应该能够替换任何其超类的实例的时候,它们之间才具有继承的关系。”依赖倒置原则指出:“要依赖于抽象,不要依赖于具体的实现。”8.2软件设计原则接口隔离原则指出:“一个类对另外一个类的依赖是建立在最小的接口上。”组合/聚合复用原则指出:“在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象进行委托达到复用已有功能的目的。”迪米特法则指出:“一个对象应当对其他对象有尽可能少的了解。”单一职责原则指出:“就一个类而言,应该仅有一个引起它变化的原因。”8.3创建型设计模式创建型设计模式是对类的实例化过程的抽象化创建型设计模式分为类的创建型模式和对象的创建型模式两种。类的创建型模式使用继承关系,把类的创建延迟到子类对象的创建型模式则把对象的创建过程动态地委托给另一个对象工厂方法设计模式工厂方法设计模式定义了一个用于创建对象的接口或者抽象类,让该实现接口的类或者抽象类的子类具体决定实例化哪一个产品类。工厂方法设计模式示例工厂方法设计模式示例代码FordFactory类代码:publicclassFordFactoryimplementsCarFactory{publicCarfactory(){returnnewFord();}}BenzFactory类的代码:publicclassBenzFactoryimplementsCarFactory{publicCarfactory(){returnnewBenz();}}工厂方法设计模式示例代码Client类的代码:publicclassClient{privateCarFactoryfordFactory,benzFactory;privateCarford,benz;publicstaticvoidmain(String[]args){CarFactoryfordFactory=newFordFactory();Carford=fordFactory.factory();CarFactorybenzFactory=newBenzFactory();Carbenz=benzFactory.factory();}}抽象工厂设计模式抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它指明软件应该具有一定的灵活性,以适应外部需求可能的变化。抽象工厂设计模式抽象工厂设计模式示例单例设计模式单例设计模式保证一个类中只有一个实例存在,其他对象均共享同一个实例。在单例设计模式中,单例对象负责实例的创建,构造方法设置为私有,不能被其他类所访问。单例对象提供了一个公共方法供其他类访问,从而使得其他类获得对该实例的引用。单例设计模式示例单例设计模式示例代码publicclassLazySingleton{privatestaticLazySingletonm_instance=null;//私有的默认构造方法,保证客户端无法直接对其实例化privateLazySingleton(){}//静态工厂方法,返回此类的唯一实例publicsynchronizedstaticLazySingletongetInstance(){if(m_instance==null){m_instance=newLazySingleton();}returnm_instance;}}8.4结构型设计模式结构型设计模式描述了如何将类或者类的实例结合在一起形成更大的结构。结构型设计模式分为类的结构型模式和对象的结构型模式两种。类的结构型模式使用继承关系把类、接口等组合在一起,以形成更大的结构。类的结构型模式是静态的。对象的结构型模式描述怎样把各种不同类型的对象组合在一起,以实现新的功能,对象的结构模式是动态的。代理设计模式代理设计模式指:为其他对象提供一种代理以控制对这个对象的访问,也就是在某些情况下客户端并不想或不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。代理设计模式适配器设计模式适配器也叫做包装器(Wrapper),它把一个类的接口变换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类可以在正常通信。适配器设计模式适配器设计模式CAD系统中的绘图编辑器代码Shape接口的代码:publicinterfaceShape{//Java语言不支持多重继承//Shape是目标角色,采用接口形式publicvoiddraw();}TextViewer类的代码:publicclassTextViewer{//TextViewer是适配者类,即源角色publicvoiddisplay(){System.out.println(显示文本信息);}}适配器设计模式CAD系统中的绘图编辑器代码TextShape类的代码:TextShape类是适配器类,属于系统搭建中的核心部分publicclassTextShapeimplementsShape{//TextShape类是适配器类privateTextVieweradaptee;publicTextShape(TextVieweradaptee){super();this.adaptee=adaptee;}//适配器类直接委派源角色的display()方法publicvoiddisplayText(){adaptee.display();}publicvoiddraw(){System.out.println(绘制文本框);}publicvoidotherMethod(){System.out.println(还可以在适配器内补充其他方法);}}8.5行为型设计模式行为型设计模式是对在不同的对象之间划分责任和算法的抽象化。行为型设计模式分为类的行为型模式和对象的行为型模式两种。类的行为型模式使用继承关系在几个类之间分配行为,对象的行为型模式则使用对象的聚合关系来分配行为。模板方法设计模式模板方法设计模式把多个类的公共内容提取到一个模板中。模板方法设计模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中完成,它使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法设计模式模板方法设计模式示例代码Template类代码:publicabstractclassTemplate{protectedStringtype;publicTemplate(Stringtype){this.type=type;}//留给子类去实现的基本方法abstractprotectedvoidusePhone(Stringtype);//抽象类已经实现好的基本方法,子类不能重写publicfinalvoidfinishWiFi(Stringtype){System.out.println(使用+type+品牌的手机完成上网任务);}//模板方法,是所有子类都要用到的一些基本功能publicfinalvoidaccessWiFi(){usePhone(type);}}模板方法设计模式示例代码HuaWeiPhone类的代码:publicclassHuaWeiPhoneextendsTemplate{publicHuaWeiPhone(Stringtype){super(type);}protectedvoidusePhone(Stringtype){System.out.println(使用+type+手机);}}SamSungPhone类的代码:publicclassSamSungPhoneextendsTemplate{publicSamSungPhone(Stringtype){super(type);}protectedvoidusePhone(Stringtype){System.out.println(使用+type+手机);}}模板方法设计模式示例代码客户端代码:publicclassClient{publicstaticvoidmain(String[]arg

1 / 48
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功