搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > Android小菜 > 设计模式之简单工厂模式

设计模式之简单工厂模式

Android小菜 2017-11-30

简单工厂模式


参考链接:

http://blog.csdn.net/todo_/article/details/50678969

http://blog.csdn.net/yanbober/article/details/45312395

http://blog.csdn.net/lovelion/article/details/9300549

http://blog.csdn.net/lovelion/article/details/9300337

http://blog.csdn.net/lovelion/article/details/9300657

http://blog.csdn.net/lovelion/article/details/9300731

参考书籍:《大话设计模式》、《略懂点设计模式》


在23种设计模式中,总共有6个创建型的设计模式:

简单工厂模式-Simple Factory Pattern【学习难度:★★☆☆☆,使用频率:★★★☆☆】;

工厂方法模式-Factory Method Pattern【学习难度:★★☆☆☆,使用频率:★★★★★】;

抽象工厂模式-Abstract  Factory Pattern【学习难度:★★★★☆,使用频率:★★★★★】;

单例模式-Singleton Pattern【学习难度:★☆☆☆☆,使用频率:★★★★☆】;

原型模式-Prototype Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】;

建造者模式-Builder Pattern【学习难度:★★★★☆,使用频率:★★☆☆☆】。

每一本设计模式的书上第一个肯定介绍的是简单工厂模式,因为没有比这个再简单的了,且它作为设计模式的入门再好不过了。


工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本篇将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF 23种设计模式,但在软件开发中应用也较为频繁。此外,工厂方法模式还有一位“大哥”——抽象工厂模式。这三种工厂模式各具特色,难度也逐个加大,在软件开发中它们都得到了广泛的应用,成为面向对象软件中常用的创建对象的工具。

本文萌级小菜鸟将通过两个阶段的案例一步步深入的方式来叙述简单工厂设计模式,第一个阶段目的作为入门和掌握,第二个阶段目的是进阶理解这个思想,最后再高级进阶作为了解。

一、简单工厂模式概述

简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:

       首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;客户端只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象。

       简单工厂模式定义如下:

简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。简单工厂模式结构比较简单,其核心是工厂类的设计,其结构如图1所示:

设计模式之简单工厂模式在简单工厂模式结构图中包含如下几个角色:

       ● Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。

       ● Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。

       ● ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。

       在简单工厂模式中,客户端通过工厂类来创建一个产品类的实例,而无须直接使用new关键字来创建对象,它是工厂模式家族中最简单的一员。