`
runfeel
  • 浏览: 935722 次
文章分类
社区版块
存档分类
最新评论

工厂三兄弟之简单工厂模式(二)

 
阅读更多

2 简单工厂模式概述

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

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

简单工厂模式定义如下:

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

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

1 简单工厂模式结构图

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

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

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

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

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

在使用简单工厂模式时,首先需要对产品类进行重构,不能设计一个包罗万象的产品类,而需根据实际情况设计一个产品层次结构,将所有产品类公共的代码移至抽象产品类,并在抽象产品类中声明一些抽象方法,以供不同的具体产品类来实现,典型的抽象产品类代码如下所示:

abstract class Product {
    //所有产品类的公共业务方法
    public void methodSame() {
        //公共方法的实现
    }

    //声明抽象业务方法
    public abstract void methodDiff();
}

在具体产品类中实现了抽象产品类中声明的抽象业务方法,不同的具体产品类可以提供不同的实现,典型的具体产品类代码如下所示:

class ConcreteProduct {
    //实现业务方法
    public void methodDiff() {
        //业务方法的实现
    }
}

简单工厂模式的核心是工厂类,在没有工厂类之前,客户端一般会使用new关键字来直接创建产品对象,而在引入工厂类之后,客户端可以通过工厂类来创建产品,在简单工厂模式中,工厂类提供了一个静态工厂方法供客户端使用,根据所传入的参数不同可以创建不同的产品对象,典型的工厂类代码如下所示:

class Factory {
    //静态工厂方法
	public static Product getProduct(String arg) {
		Product product = null;
		if (arg.equalsIgnoreCase("A")) {
			product = new ConcreteProductA();
            //初始化设置product
		}
		else if (arg.equalsIgnoreCase("B")) {
			product = new ConcreteProductB();
            //初始化设置product
		}
		return product;
	}
}

在客户端代码中,我们通过调用工厂类的工厂方法即可得到产品对象,典型代码如下所示:

class Client {
	public static void main(String args[]) {
		Product product; 
		product = Factory.getProduct("A"); //通过工厂类创建产品对象
		product.methodSame();
		product.methodDiff();
	}
}


【作者:刘伟 http://blog.csdn.net/lovelion

分享到:
评论

相关推荐

    design-pattern-java.pdf

    六个创建型模式 六个创建型模式 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(一) 工厂三兄弟之简单工厂模式(二) 工厂三兄弟之简单工厂模式(三) 工厂三兄弟之简单工厂模式(四) 工厂方法...

    Java 设计模式

    - **工厂三兄弟之简单工厂模式**:简单工厂模式通过一个工厂类负责创建所有实例,简化了客户端的使用方式。 2. **工厂方法模式**:定义了一个用于创建对象的接口,但允许子类决定实例化哪一个类。 - **工厂三兄弟...

    设计模式中文版第一部分,英文不太好的兄弟的福音(卷三)

    中文版的设计模式,包括工厂模式、策略模式等,给打家提供设计上的参考。卷三

    design-pattern

    1. **工厂三兄弟之简单工厂模式** - **目的**:通过一个工厂类根据传入的参数决定实例化哪个具体的产品类。 - **优点**:客户端不需要知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。 - *...

    兄弟一体机DCP-7010-7025维修手册

    《兄弟一体机DCP-7010-7025维修手册》是针对兄弟公司推出的DCP-7010和DCP-7025型号一体机的专业维修指导资料,旨在帮助用户和维修技术人员解决设备在使用过程中可能出现的各种问题。这份手册详细阐述了这两款多功能...

    【史上最全】【后端】【面试】必背大全.pdf

    设计模式部分可能包括了创建型模式(如工厂模式、单例模式、建造者模式等)、结构型模式(如适配器模式、装饰器模式、代理模式等)、行为型模式(如策略模式、观察者模式、迭代器模式等)的定义、特点、使用场景和...

    复习课_三次科技革命.ppt

    4. **影响**:生产力大幅提高,工业生产模式从手工工场转变为大机器生产,社会结构发生变化,催生了现代工厂制度,推动了全球贸易和殖民扩张,同时也加剧了社会贫富差距。 **第二次科技革命(电力革命)** 1. **...

    Delphi最新三层源码

    随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。... 呵呵,下次再讲讲业务逻辑方面吧,希望给做DELPHI三层的兄弟一个参考。我的QQ: 11718111 Email: wu_yanan2003@yahoo.com.cn

    家乡的变化的小学三年级作文400字.pdf

    我的家乡,曾是一片碧波荡漾、绿树成荫的宁静之地。记忆里,春天,燕子兄弟掠过水面,衔泥造窝;夏日,孩子们在河里嬉戏捉鱼;秋风起时,燕子兄弟飞往北方;而冬日,河面结冰,鲤鱼弟弟静卧水底。这样的四季更迭,...

    (全)传智播客PHP就业班视频完整课程

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    九年级历史上册 第七单元 垄断资本主义时代的世界 第20课 人类迈入“电气时代”学案 人教版.doc

    这一时期,电力逐渐取代蒸汽成为工厂机器的主要动力,并广泛应用于生活领域,极大地改善了人们的生活。 2. **电力的应用**:电力的广泛应用包括照明、通信、交通等多个方面,其中,美国科学家爱迪生在1879年发明的...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    史上最全传智播客PHP就业班视频课,8月份视频

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    JavaScript王者归来part.1 总数2

     6.5.2 模式--函数工厂及其实例   6.6 总结   第7章 对象  7.1 什么是对象   7.2 对象的属性和方法   7.2.1 对象的内置属性   7.2.2 为对象添加和删除属性   7.2.3 反射机制--枚举对象属性   7.3 ...

    数据库系统概论(第三版)课后习题答案.doc

    - **数据定义功能**: 定义数据库的模式、外模式和内模式。 - **数据操纵功能**: 包括查询、插入、删除和修改数据等操作。 - **数据库的运行管理**: 包括并发控制、故障恢复等。 - **数据库的建立和维护功能**: 包括...

Global site tag (gtag.js) - Google Analytics