【前言】

上次针对自己的理解书写一篇工厂模式的文章,后面对于工厂模式进行更加多的学习,于是了解到了抽象工厂模式。其实网上大多数人们都是抽象工厂模式是工厂模式的升级版本,虽然我并不知道所说的升级是什么意思,但是升级给我一种模糊的感觉。

学习了解抽象工厂模式还是不容易,我前前后后花了好几天去思考,阅览相关的代码例子,才对抽象工厂模式有一点了解。

为了准确理解升级这个词在工厂模式上的意思,我认为这样表示更好:多工厂模式(一个接口有多个工厂类,每个工厂类都可以创建接口的实例)

虽然理解了抽象工厂模式,但是我还是想不到在Android开发种和业务相互结合的应用情景,这个问题我会继续深入思考。

【特点】

1. 抽象工厂模式拥有工厂模式的特点

2.一个接口对应有多个工厂,可以归纳为一对多关系

3. 抽象工厂模式可以使代码逻辑清楚,但是接口增加分类会使多次需要修改和增加工厂类

【适用】

1.接口的业务实现产生分类的概念,每种分类都有对应的一个以上实现类。

【图解】

基本形式:

特殊形式:

【例子】

// 图片二值化接口(黑白化)
public interface Binarization{
    public Image getBinarizationImage();
}

// 速度优先的算法(分类一)
public abstract class SpeedBinarization implements Binarization{

}

// 空间优先的算法(分类二)
public abstract class SpaceBinarization implements Binarization{

}

// 速度优先算法1
public class SpeedAlgorithm1 extends SpeedBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}

// 速度优先算法2
public class SpeedAlgorithm2 extends SpeedBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}

// 空间优先算法1
public class SpaceAlgorithm1 extends SpaceBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}

// 空间优先算法2
public class SpaceAlgorithm2 extends SpaceBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}
// 抽象工厂
public interface BinarizationFactory{
    public Binarization getBinarization(String name);
}

// 速度优先的工厂
public class SpeedFactory implements BinarizationFactory{
    public Binarization getBinarization(String name){
        if(name.equals("one")){
            return new SpeedAlgorithm1();
        }else if(name.equals("two")){
            return new SpeedAlgorithm2();
        }
        return null;
    }
}

// 空间优先的工厂
public class SpaceFactory implements BinarizationFactory{
    public Binarization getBinarization(String name){
        if(name.equals("one")){
            return new SpaceAlgorithm1();
        }else if(name.equals("two")){
            return new SpaceAlgorithm2();
        }
        return null;
    }
}
// 抽象工厂创建器public class BinarizationFactoryCreator{
     public static BinarizationFactory getFactory(String factory){
         if(factory.equals("speed")){
             return new SpeedFactory();
         }else if(factory.equals("space")){
             return new SpaceFactory();
         }
         return null;
     }
}    

【设计模式】抽象工厂模式(Abstract Factory Pattern)的更多相关文章

  1. 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

    抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...

  2. C#设计模式——抽象工厂模式(Abstract Factory Pattern)

    一.概述在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作.如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合.对此,抽象工厂模 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

  4. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  5. 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...

  6. 【UE4 设计模式】抽象工厂模式 Abstract Factory Pattern

    概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...

  7. 设计模式之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式.例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要 ...

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

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

  9. Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)

    抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创 ...

  10. 六个创建模式之抽象工厂模式(Abstract Factory Pattern)

    问题: 使用工厂方法模式的主要问题是工厂类过多,每个产品对应一个工厂,不利于维护.因此可以考虑使用一个工厂创建一个产品族. 定义: 提供创建一些列相关或相互依赖的对象实例的接口,这些类可以称为一个产品 ...

随机推荐

  1. React组件绑定this的三种方法

    我们在使用React组件时,调用方法常常用到this和event对象,默认情况是不会绑定到组件上的,需要特殊处理. 节点上使用bind绑定 特点:该方法会在每次渲染组件时都会重新绑定一次,消耗一定的性 ...

  2. WPF中使用DataGrid时操作列按钮问题

    在使用DataGrid的过程中,我们有时候需要对选取的某一行数据进行多个操作,这个时候操作列只有一个按钮显然无法满足我们的要求,我们需要多个按钮才能达到我们的目的. UI页面代码: <Grid& ...

  3. 转-->>mysql的bin log

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  4. python模块之configparse模块

    # -*- coding:utf-8 -*- import configparser # configparser 模块 # 1.创建一个创建对象 # 2.创建键值对的配置项目 字典的形式进行创建 # ...

  5. SSH整合时多表关联查询出现Javassist增强失败

    Customer类对应的表为另一个表LinkMan的外键,在进行LinkMan表操作时,出现如下错误. 遇到Javassist增强失败网上说法不一,有的说Customer没有无参构造方法,javass ...

  6. 使用python连接mysql/oracle

    最近python比较火,我本身觉得python这种语言速度也不快,做项目也一般,学他干啥?但是了解到python把其他语言的函数封装成了自己的包,用python就可以直接调用,感觉python还是值得 ...

  7. android 开发设计模式---单例模式

    要保证单例,需要做以下几步 必须防止外部可以调用构造函数进行实例化,因此构造函数必须私有化. 必须定义一个静态函数获得该单例 单例使用volatile修饰 使用synchronized 进行同步处理, ...

  8. 详解PHP中foreach

    foreach有两种语法: 第一种:遍历给定的 数组语句 array_expression 数组.每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下 ...

  9. 介绍Kubernetes监控Heapster

    什么是Heapster? Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS,Kubernetes有个出名的监控agent—cAdvisor.在每个kubern ...

  10. winform Combobox出现System.Data.DataRowView的解决的方法

    个人总结: 1.触发了SelectedIndexChanged事件时:comboBox1.DataSource = dt;要放在comboBox1.SelectedIndex = 0;的上面 comb ...