欢迎来到天天文库
浏览记录
ID:40502908
大小:1001.82 KB
页数:7页
时间:2019-08-03
《设计模式复习重点之八大模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、工厂方法模式(虚拟构造器模式多态工厂模式)女娲照人(黑白黄三类)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。父类负责定义创建对象的公共接口,而子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。参与者:·工厂角色(Creator)·声明工厂方法,返回一个产品。·真实的工厂(ConcreteCreator)·实现工厂方法,由客户调用,返回一个产品的实例。·产品角色(Product)·定义产品的接口。·真实的
2、产品(ConcreteProduct)·实现接口产品角色的类。优点:1,基于工厂角色和产品角色的多态性设计。所有具体工厂类都具有同一抽象父类。2在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口及客户端,只需添加具体工厂和具体产品。3工厂方法模式是典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不用关心,符合迪米特法则,也符合依赖倒置原则,也符合里氏替换原则。缺点:添加新产品时,需编写新的具体产品类,还要提供与之对应的具体工厂类。适用性:·类不知道自己要创建哪一个对象·类用它的子类来指定创建哪个
3、对象·客户需要清楚创建了哪一个对象案例一:设计一个连接邮件服务器的框架,有三种网络协议可供选择:POP3,IMAP,HTTP,我们就可以把这三种连接方法作为产品类。定义一个接口如IConnectMail,然后定义对邮件的操作方法,用不同的方法实现三个具体的产品类(也就是连接方式),再定义一个工厂方法,按照不同的传入条件,选择不同的连接方式。案例二:异构项目中,通过WebService与一个非Java的项目交互,虽然WebService号称是可以做到异构系统的同构化,但是在实际的开发中,还是会碰到很多问题,如类型问题,
4、WSDL文件的支持问题等等。可以从WSDL中产生的对象都认为是一个产品,然后由一个具体的工厂类进行管理,减少与外围系统的耦合。案例三:在数据库开发中,连接数据库,数据库从MySQL切换到Oracle,需要改动的地方就是切换一下驱动名称,其他的都不需要修改。抽象工厂模式(kit模式)女娲造人忘记给人类定义了性别,那怎么办?抹掉重来,从头开始建立所有事物,使用的物品和设备还是原来的黄土和八卦炉,但是现在需要在不同的人种之中加入性别,于是把八卦炉一份为二,分为女性八卦炉和男性八卦炉。定义:为创建一组相关或相互依赖的对象提供
5、一个接口,而且无需指定它们的具体类。1、提供一系列相互依赖对象的创建工作2、封装对象常规的创建方法(new)(变化点在“对象创建”,因此就封装“对象创建”。面向接口编程——依赖接口,而非依赖实现)3、提供统一调用数据访问方法的方式4、避免调用数据访问方法和具体对象创建工作的紧耦合提供一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类抽象工厂设计模式中各个对象的主要功能、职责:1、用抽象工厂生产抽象产品2、用实体工厂生产实体产品3、用抽象产品提供实体产品访问接口4、用实体产品实现自己的功能参与者:·抽象工厂(
6、AbstractFactory)·声明生成抽象产品的方法。·具体工厂(ConcreteFactory)·执行生成抽象产品的方法,生成一个具体的产品。·抽象产品(AbstractProduct)·为一种产品声明接口。·具体产品(Product)·定义具体工厂生成的具体产品的对象,实现产品接口。·客户(Client)·我们的应用程序,使用抽象产品和抽象工厂生成对象优点:1隔离了具体类的生成,使得客户不需要知道什么被创建了。2当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。3符合
7、开放封闭原则缺点:添加新的产品对象时,难以扩展抽象工厂以便生产新种类的产品。适用性:·系统需要屏蔽有关对象如何创建,如何组织和如何表示·系统需要由关联的对象来构成·有关联的多个对象需要一起应用并且它们的约束是强迫的(不可分离)·你想提供一组对象而不显示它们的实现过程,只显示它们的接口案例一:一个文本编辑器和一个图片处理器,都是软件实体,但是*nix下的文本编辑器和Windows下的文本编辑器虽然功能和界面都相同,但是代码实现是不同的,图片处理器也有类似情况。也就是具有了相同的约束条件:操作系统类型。于是我们可以使用抽
8、象工厂模式,产生不同操作系统下的编辑器和图片处理器。案例二:一个应用,需要在三个不同平台(Windows、*nix、Android)上运行,你会怎么设计?分别设计三套不同的应用?非也,通过抽象工厂模式屏蔽掉操作系统对应用的影响。三个不同操作系统上的软件功能、应用逻辑、UI都应该是非常类似的,唯一不同的是调用不同的工厂方法,由不同的产品类去处理与
此文档下载收益归作者所有