欢迎来到天天文库
浏览记录
ID:30776433
大小:349.33 KB
页数:9页
时间:2019-01-03
《java-android设计模式学习笔记(4):抽象工厂模式-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、java/android设计模式学习笔记(4):抽象工厂模式-编程开发技术java/android设计模式学习笔记(4):抽象工厂模式原文出处:Shawn_Dut再来介绍一下抽象工厂模式(AbstactFactoryPattern),也是创建型模式之一,上篇I•専客主要介绍了工厂方法模式。抽象工厂模式和工厂方法模式稍有区别。工厂方法模式屮工厂类生产出来的产品都是具体的,也就是说每个工厂都会生产某一种具体的产品,但是如果工厂类中所生产出來的产品是多种多样的,工厂方法模式也就不再适用了,就要使用抽象工厂模式了。抽象工厂模式的起源或者最早的应用,是对不同操作系
2、统的图形化解决方案,比如在不同操作系统中的按钮和文字框的不同处理,展示效果也不一样,对于毎一个操作系统,其木身构成一个工厂类,而按钮与文字框控件构成一个产品类,两种产品类两种变化,各自有自己的特性,比如Windows,Unix和MacOS下的Button和Text等。所以据此,我们可以初步构建框架:然后对于Windows系统來说需要生成的是WindowsButton和WindowsText产品类对象,其他两个系统一样也需要对应的对象。为了达到“为创建一组相关或者是相互依赖的对象捉供一个接口,而不需要指定它们的具体类”的松散耦合原则,这时使用抽彖工厂模式就
3、非常契合。PS:对技术感兴趣的同鞋加群544645972-起交流。设计模式总目录java/android设计模式学习笔记目录特点抽象工厂模式(AbstactFactoryPattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指明具体类。和工厂方法模式一样,抽象工厂模式依然符合“针对抽象编程,不针对具体类编程”的原则,将客户端和具体类解耦,增加扩展性,契合设计模式屮的依赖倒置原则和里氏替换原则。UML类图我们来看看抽彖工厂模式的uml类图:虽然抽彖工厂模式的类繁多,但是主要还是分为4类:•AbstractFactory:抽象工厂角色(对应
4、【Factory接口),它声明了一组用于创建不同产品的方法,每一个方法对应一种产胡,如图中的IFnctory接口就有createButton和crcatcTcxt方法用于创建IBLitton对象和ITcxt对象。•ConcreteFactory:具体工厂角色(对应WindowFactory,UnixFactory和MacOSFactory类),它实现了在抽彖工厂中定义的创建产品的方法,生成一组具体产品,这些产品构成一个产品种类,每一个产品都位于某个产品等级结构中。•AbstractProduct:抽象产品角色(对应IButton和IText接口),他定义
5、了几种产品的基本行为。•ConcrctcProduct:具体产品角色(对应WindowsButton和WindowsTcxt等6个实现类),它定义具体工厂生产的具体产品对象,实现抽象产品接口屮声明的业务方法。这里用的是一个实例的UID1类图,对应的抽象工厂模式的UH11类图只要把其中的角色换一个名字就可以了,是一样的。示例与源码我们直接根据上而的uml类图来构建我们的图形系统,Button和Text的角色是产品类,他们对应都有3个实现的产品子类;Windows,Unix和MacOS这几个系统应该为具体的工厂类:产品类主要是IButton接口和其实现子类,
6、IText接口和其实现子类。IButton接口和其子类:IButton.classpublicinterfaceTButton{voidshow();}WindowsButton.classpublicclassWindowsButtonimplementsIButton{©Overridepublicvoidshow(){Log.e(z,showz,,"thisisaWindowsbutton〃);UnixButton.classpublicclassUnixButtonimplementsIButton{©Overridepublicvoidshow
7、(){Log.e(z,showz,,气hisisaUnixbutton");MacOSButton.classpublicclassMacOSButtonimplementsIButton{©Overridepublicvoidshow(){Log.e(〃show〃,"thisisaMacOSbutton〃);IText接口和其实现子类:IText・classpublicinterfaceIText{voidshow();}WindowsText.classpublicclassWindowsTextimplementsIText{©Overridepu
8、blicvoidshow(){Log.e(〃show〃,"thisisaWind
此文档下载收益归作者所有