问题:

抽象工厂模式,是一个,狠恶心的模式,那么这个模式在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{ @Override
public LotterySSQ getSSQ() {
return new HBssq();
} @Override
public 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{ @Override
public 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{ @Override
public String getRandom(int num) {
// TODO Auto-generated method stub
return null;
} }
package com.example.demo.AbstractFactory;
/**
* 详细工厂 湖南工厂
* @author qubian
* @data 2015年6月12日
* @email naibbian@163.com
*
*/
public class HNFactory implements LotteryFactory{ @Override
public LotterySSQ getSSQ() {
return null;
} @Override
public 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两个操作系统下的视图(buttonButton。TextView等),而构建视图族,视图族中有各自不同的实现;

9.2在java 的连接数据库的操作中,对不同的数据库的操作而形成的对象操作族。就是一种非常好的模式设计;可是当再次更换数据时,所须要造成的接口的改动也是十分恶心,所以这样的模式拓展性不好!

当然,既然模式设计出来就有其长处与可用性。仅仅是临时在Android源代码中没有发现,也许能够在自己的代码中实现。同一时候也期待和等待出现的惊喜。

Android设计模式(十二)--抽象工厂模式的更多相关文章

  1. java设计模式之二抽象工厂模式(Abstract Factory)

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  2. 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)

     设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...

  3. 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

     设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...

  4. 大话设计模式C++版——抽象工厂模式

    前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...

  5. JAVA设计模式(二)工厂模式

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  6. 一天一个设计模式——Abstract Factory抽象工厂模式

    一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...

  7. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  8. Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

  9. [设计模式]<<设计模式之禅>>抽象工厂模式

    1 女娲的失误 上一篇讲了女娲造人的故事.人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍 脑袋,忘记给人类定义性别了 ...

  10. JAVA常用设计模式(一、抽象工厂模式)

    抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...

随机推荐

  1. 【jQuery04】折叠树

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. redis.conf配置文件配置项解析

    知识来源于 : https://blog.csdn.net/bsfz_2018/article/details/79061413[Redis在linux下的安装] daemonize:如需要在后台运行 ...

  3. keepalived + nginx 实现高可用

    原理 nginx 可以实现负载均衡,但 nginx 自身存在单点故障的问题,这时候最先想到的就是 keepalived,可以解决单点故障的问题 由于没有使用 lvs,所以这里 nginx 之间不存在负 ...

  4. pointer-events的css属性。使用该属性可以决定是否能穿透绝对定位元素去触发下面元素的某些行为

    pointer-events的css属性.使用该属性可以决定是否能穿透绝对定位元素去触发下面元素的某些行为,比如当一个元素盖住了某个点击事件时可用. 现在Firefox3.6+/Safari4+/Ch ...

  5. GenIcam标准(四)

    2.8.可用的节点类型 本章对每个可用的节点类型提供一个概要的描述,包括其功能.用途以及最关心的参数.另外,对于每个节点在GenICam标准的XML格式文件中的layout,会有一个正式的说明.这个格 ...

  6. 【BZOJ 1293】[SCOI2009]生日礼物

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然的滑动窗口题. (尺取法 如果l..i这一段已经有k种珍珠了. 那么就尝试把l++; (即把l这个影响尝试去掉一下 如果不足k种 ...

  7. Eclipse集成Git插件及使用

    目录(?)[+] 1 Git插件安装 11 下载插件 2 Git提交代码 21 建git的本地仓库 第一种 第二种 项目创建本地仓库后 如图 22 提交本地仓库 23 提交远程仓库 3 Git下载代码 ...

  8. [Python]Use Flask-Admin with PostgreSQL

    This code recipe gives you an idea of how to use Flask-Admin with postgresql database. from flask im ...

  9. Android触碰事件

    OnTouchListener使用 public class ViewActivity extends Activity implements View.OnTouchListener { @Over ...

  10. 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)

    [POJ 1845] Sumdiv 用的东西挺全 最主要通过这个题学了约数和公式跟二分求等比数列前n项和 另一种小优化的整数拆分  整数的唯一分解定理: 随意正整数都有且仅仅有一种方式写出其素因子的乘 ...