`
Mr.TianShu
  • 浏览: 28837 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

工厂方法模式解析例子

阅读更多
Abstract: 工厂方法模式属于创建型模式,本文深入浅出的讲述了设计模式中的工厂方法模式,并给出了简单的示例,例子浅显易懂,并附带源代码。
 
工厂方法经常用在以下两种情况中:
第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。
第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。
工厂方法的结构:

1工厂方法的结构
具体例子:这是一个简单的例子,来自《深入浅出设计模式》
2工厂方法UML
在这里Creator就是MobileFactory,工厂方法就是productMobile(),Concrete Creator 就是NokiaFactory,MotorolaFactory,抽象产品是Mobile,具体产品是MotorolaNokia,每个具体产品都实现了抽象方法call(),客户端创建一个具体工厂,调用工厂方法便可以生产一种Mobile,客户端最需要的最终产品便被创建了。
MobileFactory的源代码:
package factoryMethod;
public interface MobileFactory{
       public Mobile produceMobile();
}
Mobile的源代码:
package factoryMethod;
public interface Mobile{
    public void call();
}
MotorolaFactory的源代码:
package factoryMethod;
public class MotorolaFactory implements MobileFactory{
       public Mobile produceMobile(){
              return new Motorola();
       }
}
Nokia的源代码:
package factoryMethod;
public class Nokia implements Mobile{
       public void call(){
              System.out.println("Nokia producted");
       }
}
Client的源代码:
package factoryMethod;
public class Client{
       public static void main(String[] args){
              MobileFactory mbf = new NokiaFactory();
              Mobile mb=mbf.produceMobile();
              mb.call();
              mbf= new MotorolaFactory();
              mb=mbf.produceMobile();
              mb.call();
       }
}
使用场合:
当一个类不知道它所必须创建对象的类或一个类希望由子类来指定它所创建的对象时,可以使用工厂方法。

相关推荐

    实例解析C#设计模式编程中简单工厂模式的使用

    主要介绍了C#设计模式编程中简单工厂模式的使用,文中也举了在.NET框架下简单工厂模式的实现例子,需要的朋友可以参考下

    javascript工厂模式和构造函数模式创建对象方法解析

    工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现)。考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用...

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...

    IOS设计模式全解析与Objective-C编程之道之 .pdf.zip

    iOS 设计模式,文字通过代码与例子,清晰的讲解了设计模式:工厂模式、单列、接口适配、桥接、中介者、观察者、抽象集合、迭代器、行为扩展、算法封装、责任链、装饰、访问者、模板方法、命令、性能与对象访问、代理...

    php5 类与对象

    php5 类与对象 个人总结与简单的例子,类与对象1.... 2.... 3. PHP 构造方法 __construct() 4. PHP 析构方法 __destruct() 5.... 6.... php 设计模式:工厂模式和单例模式 19.对象对象迭代 20 this关键字

    asp.net知识库

    一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术...

    JavaScript王者归来part.1 总数2

     10.3.1 用于模式匹配的String方法及其例子   10.3.2 用于模式匹配的RegExp方法   10.3.2.1 一个使用exec()方法从身份证号码获取生日的例子   10.3.2.2 一个使用test()方法遍历字符串的例子   10.4...

    node-basic-redis-factory:用于nodejs的基本Redis客户端工厂,用于处理url字符串(和其他一些东西)

    是的,我意识到这应该被称为redis客户工厂,但是那并不那么吸引人,那时我还没有意识到主要道具/大声喊叫/感谢编写了我基本上刚刚提取到模块中的大部分选项解析代码。例子另请参阅/examples文件夹以获取有效的演示 ...

    C#.Net实体代码生成工具 v3.0 (20090830最新版)

    是一款专门为 C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想、分层架构设计及ORM,并参考了微软Petshop中经典的思想,融入了工厂模式等设计模式,反射机制等。从数据库中提取...

    C#.Net实体代码生成工具 v3.1

    是一款专门为 C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想、分层架构设计及ORM,并参考了微软Petshop中经典的思想,融入了工厂模式等设计模式,反射机制等。从数据库中提取...

    C#.Net实体代码生成工具 v3.0

    C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想和分层架构设计,并参考了微软Petshop中经典的思想和设计模式,融入了工厂模式,反射机制,ORM等思想。从数据库中提取表对应的...

    C#.Net实体代码生成工具 v3.3

    是一款专门为C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,融入了工厂设计模式及反射机制等。工具目前直接支持Oracle、SqlServer、...

    C#.Net实体代码生成工具 v3.2

    是一款专门为C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,融入了工厂设计模式及反射机制等。工具目前直接支持Oracle、SqlServer、...

    .NET平台上的文件抽取框架toxy.zip

    ParserFactory是工厂模式类,负责所有解析器的实例化工作,它会根据传入文件的扩展名自动寻找合适的解析器。下面展示一下PDF文档的抽取代码,一样极其简单:123string path = TestDataSample.GetPdfPath("Sample1....

    Spring.net框架

    为了消除MainApp对其它组件的依赖性,我们引入工厂模式,并且根据配置文件指定的装配规程,利用.net提供的反射技术完成对象的组装工作。 本部分代码仅仅提供一种功能演示,如果实际应用仍需进一步完善(建议使用一些...

    Python核心编程第二版(ok)

     5.5.1 混合模式操作符   5.5.2 标准类型操作符   5.5.3 算术操作符   5.5.4 位操作符(只适用于整型)   5.6 内建函数与工厂函数   5.6.1 标准类型函数   5.6.2 数字类型函数   5.6.3 仅...

Global site tag (gtag.js) - Google Analytics