UML设计模式 9 设计模式(3)--Factory,Singleton模式

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

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

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

资源描述

权巍主要内容9.1工厂模式(Factory)9.1.1简单工厂9.1.2工厂方法9.1.3抽象工厂9.2单例模式(Singleton)9.3里氏代换原则2UML和设计模式9.1工厂模式--创建型模式创建型模式(CreationalPattern)是对类的实例化过程的抽象化。一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定。创建型模式分为类的创建型模式和对象的创建型模式。3UML和设计模式9.1.1简单工厂模式创建对象问题:不能应对“具体实例化类型”的变化。开闭原则(对扩展开放、对修改封闭)解决思路:封装变化点——哪里变化,封装哪里常规方法创建对象:Roadroad=newRoad();Roadsandroad=newsandRoad();4UML和设计模式9.1.1简单工厂模式一个农场的例子5UML和设计模式简单工厂模式(静态工厂方法模式)就是一个工厂类根据传入的参数决定创建出哪一种产品类的实例。6UML和设计模式简单工厂模式的三个角色:工厂类角色模式的核心,负责根据传入的参数决定创建出哪种具体产品类的对象,通常为具体类。抽象产品由模式所创建的对象的父类,或它们共同拥有的接口担任,可为抽象类或接口。具体产品模式所创建的任何对象都是这个角色的实例,为具体类。7UML和设计模式示例代码(简单工厂)://抽象产品(接口或抽象类)interfaceRoad{……}//具体产品ClassrailRoadextendsRoad{……}ClasssandRoadextendsRoad{……}//具体工厂:是核心,负责创建具体产品classRoadFactory{publicstaticRoadCreateRoad(Stringname){//根据不同的情况(如名字等)创建不同的产品returnnewrailRoad();}……}//创建一个Road对象Roadroad=RoadFactory.CreateRoad(“railroad”);客户程序:8UML和设计模式简单工厂模式的优点:①设计简单,产品类的等级结构不会反映到工厂类中,从而产品类等级结构的变化也就不会影响到工厂类。②由工厂类决定何时创建何种产品类的对象,免除了客户端创建产品类对象的责任。缺点:①静态:增加新的产品(如WaterRoad)时,要修改工厂类,违反了面向对象设计的基本原则。②工厂类负责创建所有产品,一旦不能正常工作,整个程序都会受到影响。9UML和设计模式9.1.2工厂方法模式(多态性工厂模式)问题:需要频繁增加新的对象解决:封装变化点(抽象的工厂)10UML和设计模式在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做,即本模式中包含:抽象工厂、具体工厂。抽象工厂:负责给出具体工厂类必须实现的接口。具体工厂:实现抽象工厂接口,用于创建具体的产品实例。抽象产品具体产品(2)工厂方法模式(多态性工厂模式)11UML和设计模式农场例子---工厂方法模式UML和设计模式12//抽象产品(接口或抽象类)interfaceRoad{……}//具体产品classrailRoadimplementsRoad{……}classsandRoadimplementsRoad{……}//抽象工厂(稳定不变)interfaceRoadFactory{publicabstractRoadCreateRoad();}//railRoad、sandRoad等对象的具体工厂classrailRoadFactoryimplementsRoadFactory{publicRoadCreateRoad(){returnnewrailRoad();}}classsandRoadFactoryimplementsRoadFactory{publicRoadCreateRoad(){returnnewsandRoad();}}工厂方法模式代码实例classwaterRoadimplementsRoad{……}classwaterRoadFactoryimplementsRoadFactory{publicRoadCreateRoad(){returnnewwaterRoad();}}13UML和设计模式//客户端程序:依赖抽象工厂、抽象产品classClient{publicstaticvoidmain(String[]args){RoadFactoryrf1,rf2;Roadroad1,road2,road3;//实例化2个railRoad对象rf1=newrailRoadFactory();road1=rf1.CreateRoad();//稳定不变road2=rf1.CreateRoad();//实例化1个sandRoad对象rf2=newsandRoadFactory();road3=rf2.CreateRoad();}}14UML和设计模式9.1.3抽象工厂模式问题:经常需要创建一个新的系列,即产品族。产品族(ProductFamily):是指功能相关联的产品组成的家族。每个产品族包含相互依赖的对象,这些对象稳定不变。抽象工厂模式的意图:向客户提供一个接口,使得客户可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。15UML和设计模式抽象工厂模式类图结构ConcreteFactory3CreateProductA()CreateProductB()ProductA3ProductB316UML和设计模式抽象工厂:负责给出具体工厂类必须实现的接口,是模式的核心,与应用系统的逻辑无关。具体工厂:实现抽象工厂接口,直接在客户端的调用下创建产品实例。这个角色含有选择合适的产品对象的逻辑,与应用系统的逻辑紧密相关。抽象产品:具体产品:抽象工厂模式的角色17UML和设计模式(3)抽象工厂模式代码实例:抽象工厂:FacilityFactory具体工厂(对应产品族):IceFacilityFactory、DesertFacilityFactory。抽象产品:Road、Building、Tunnel具体产品:IceRoad、DesertRoad、IceBuilding、DesertBuilding、IceSky、DesertSky18UML和设计模式农场例子—抽象工厂模式UML和设计模式199.2单例模式(Singleton)UML和设计模式20单例模式的特点单例类只能有一个实例;单例类必须自己创建自己的这个唯一的实例;单例类必须给所有对象提供这一实例。什么是Singleton单例模式单例模式的意图:保证一个类仅有一个实例,并提供一个该类实例的全局访问点。UML和设计模式21单例模式的类图解析私有的构造方法类型为单例类本身的静态变量获得单例类的唯一实例的方法UML和设计模式22UML和设计模式23单例模式示意代码:publicclassSingleton{privatestaticSingletoninstance=null;//其它成员数据……protectedSingleton(){}publicstaticSingletongetInstance(){if(instance==null){instance=newSingleton();}returninstance;}}9.3里氏代换原则里氏代换原则(LiskovSubstitutionPrincipal,LSP)的严格表达如下:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。换言之,一个软件实体如果使用的是基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。UML和设计模式24

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

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

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

×
保存成功