Android设计模式(十二)--抽象工厂模式
来源:互联网 发布:网络屏蔽器软件下载 编辑:程序博客网 时间:2024/05/22 16:48
问题:
抽象工厂模式,是一个,狠恶心的模式,那么这个模式在Android有没有用到过呢?
1、定义:
抽象工厂模式:为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类。
2、使用:
2.1、不依赖于产品类实例如何被创建,组合和表达的细节;
2.2、产品有多于一个的产品族,而系统只消费其中某一族的产品;
2.3、同属于同一个产品族是在一起使用的;
2.4、提供一个产品类的库,所有产品以同样的接口出现,从而使使用者不依赖于实现;
3、与工厂方法的区别:
3.1、抽象工厂是面向一个工厂方法的升级;
3.2、抽象方法提供的是一个产品族,即多个产品等级结构,而工厂方法则是针对一个产品等级结构;
3.3、抽象方法提供的产品是衍生自多个抽象或者接口,而工厂方法则衍生自同一个抽象或者接口;
4、优点:
4.1、由于是工厂方法的升级,因此继承了工厂方法的所有优点;
4.2、可以在内部对产品族的产品进行相应的约束;
4.3、方便的切换产品族;
5、缺点:
5.1、不易拓展。新的产品族出现,抽象工厂以及相应的实现都需要修改;
6、最终的目的:
设计模式的目的最终是为了解除耦合,那么使用时,当工厂方法,添加某些方法,而形成的产品族时,便成为了抽象工厂,当抽象工厂减少某些方法变的单一时,便成为工厂方法。使用模式仅仅为了更好的维护与拓展。
7、简单的demo:
在彩票中有双色球,大乐透,等彩种,也有各种地方性的彩种,为了demo的方便,我将SSQ,DLT也划分为地方性彩种;
每个地方,都有这两个彩种,从而形成产品族。
package com.example.demo.AbstractFactory;/** * 抽象工厂,得到产品 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public interface LotteryFactory {public LotterySSQ getSSQ();public LotteryDLT getDLT();}package com.example.demo.AbstractFactory;/** * 产品接口 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public interface LotterySSQ {public String getRandom(int num);}package com.example.demo.AbstractFactory;/** * 产品接口 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public interface LotteryDLT {public String getRandom(int num);}
具体工厂:
package com.example.demo.AbstractFactory;/** * 具体工厂 湖北工厂 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public class HBFactory implements LotteryFactory{@Overridepublic LotterySSQ getSSQ() {return new HBssq();}@Overridepublic LotteryDLT getDLT() {return new HBdlt();}}package com.example.demo.AbstractFactory;/** * 具体产品 湖北双色球 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public class HBssq implements LotterySSQ{@Overridepublic String getRandom(int num) {return null;}}package com.example.demo.AbstractFactory;/** * 具体产品,湖北大乐透 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public class HBdlt implements LotteryDLT{@Overridepublic String getRandom(int num) {// TODO Auto-generated method stubreturn null;}}package com.example.demo.AbstractFactory;/** * 具体工厂 湖南工厂 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public class HNFactory implements LotteryFactory{@Overridepublic LotterySSQ getSSQ() {return null;}@Overridepublic LotteryDLT getDLT() {return null;}}
具体使用:
package com.example.demo.AbstractFactory;/** * 使用 * @author qubian * @data 2015年6月12日 * @email naibbian@163.com * */public class UseAbstractFactory {public void use(){// 使用时的产品族 可以随时方便切换//LotteryFactory factory = new HNFactory();LotteryFactory factory = new HBFactory();LotterySSQ ssq = factory.getSSQ();ssq.getRandom(7);LotteryDLT dlt =factory.getDLT();dlt.getRandom(8);}}
8、Android的说明:
由于抽象工厂不易于拓展新的产品族,所以这种设计模式,在提供对外部人员访问时,很少使用,所以在Android源码中,基本是没有这种设计模式,当然或许也是我没有找到吧,不过我想应该是没有的。
9、运用最为典范:
9.1 模式设计之初:就是为了适应在Unix与Windows两个操作系统下的视图(按钮Button,TextView等),而构建视图族,视图族中有各自不同的实现;
9.2在java 的连接数据库的操作中,对不同的数据库的操作而形成的对象操作族,就是一种很好的模式设计;但是当再次更换数据时,所需要造成的接口的修改也是十分恶心,所以这种模式拓展性不好!
当然,既然模式设计出来就有其优点与可用性,只是暂时在Android源码中没有发现,或许可以在自己的代码中实现,同时也期待和等待出现的惊喜!
- Android设计模式(十二)--抽象工厂模式
- 大话设计模式读书笔记(十二) 抽象工厂模式
- 设计模式-抽象工厂
- 设计模式笔记-抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式-抽象工厂模式
- 设计模式-抽象工厂模式(AbstractFactoryPattern)
- android 设计模式-抽象工厂
- android设计模式之抽象工厂模式
- Android中的设计模式-抽象工厂模式
- Android 设计模式 笔记 - 抽象工厂模式
- Android设计模式-抽象工厂模式
- Android的设计模式-抽象工厂模式
- JAVA设计模式学习之----创建模式:工厂模式(抽象工厂)
- iOS设计模式-抽象工厂
- Android设计模式---工厂方法模式和抽象工厂模式
- 设计模式(抽象工厂)
- iOS开发UI篇 -- 0401团购案例-使用xib自定义控件
- 黑马程序员------面向对象02
- 通过AIDL实现挂断电话功能
- 亚马逊资源名称 (ARN) 和 AWS 服务命名空间
- java,下划线与驼峰命名转换
- Android设计模式(十二)--抽象工厂模式
- 设置Linux交换分区
- FastDFS之Tracker-Leader选择和tracker server间通信
- C语言宏定义总结
- AspNet MVC4 教学-29:Asp.Net MVC4 jQuery计时器读取服务器时间的Ajax技术快速Demo
- android代码混淆之不同ADT版本和不同IDE之间混淆配置文件的区别
- 自定义吐丝类窗体,并实现拖拽功能
- [CodeForces365C]Matrix[构造][数学]
- FastDFS合并存储原理分析