工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
类图结构:
下面我们通过代码实现上面的类图:
1,首先我们定义产品接口,我们定义一个手机这个接口,基本的手机都用打电话发短信的功能
/* * @(#)Mobile.java 2014-3-17 */ package com.lotus.test.factory; /** * 手机抽象接口 * @author tsface * @version 2014-3-17 * @since 1.0 */ public interface Mobile { //发送消息 public void sendMessage(); //打电话 public void call(); }
2,有了手机接口,我们就有具体的产品,我们假设Iphone手机和Moto手机都遵循标准接口
/* * @(#)IphoneMobile.java 2014-3-17 */ package com.lotus.test.factory.product; import com.lotus.test.factory.Mobile; /** * Iphone手机实现类 * @author Administrator * @version 2014-3-17 * @since 1.0 * @see */ public class IphoneMobile implements Mobile { private String _mobile = "Iphone"; @Override public void sendMessage() { System.out.println(_mobile + "发送消息成功"); } @Override public void call() { System.out.println(_mobile + "拨打电话成功"); } }
/* * @(#)MotoMobile.java 2014-3-17 */ package com.lotus.test.factory.product; import com.lotus.test.factory.Mobile; /** * Moto手机 * @author Administrator * @version 2014-3-17 * @since 1.0 * @see */ public class MotoMobile implements Mobile { private String _mobile = "Moto"; @Override public void sendMessage() { System.out.println(_mobile + "发送消息成功"); } @Override public void call() { System.out.println(_mobile + "拨打电话成功"); } }
3,产品的设计基本上已经完成,那么产品总要有工厂去设计,在这里我们假设所有的工厂都会遵守一个符合某一标准的基本规范,或者说至少一个工厂都应该能生产初手机,那么我们不妨设计一个高度抽象的工厂接口。
/* * @(#)IMobileFactory.java 2014-3-17 */ package com.lotus.test.factory; /** * 描述当前类的作用 * @author Administrator * @version 2014-3-17 * @since 1.0 * @see */ public interface IMobileFactory { //创建手机 public Mobile createMobile(); }
4,不同的手机生产的工厂不一样,比如Iphone的手机生产可能是A工厂,Moto的生产上是B工厂
/* * @(#)IphoneMobileFactory.java 2014-3-17 */ package com.lotus.test.factory.createor; import com.lotus.test.factory.IMobileFactory; import com.lotus.test.factory.Mobile; import com.lotus.test.factory.product.IphoneMobile; /** * 创建Iphone手机的工厂类 * @author Administrator * @version 2014-3-17 * @since 1.0 */ public class IphoneMobileFactory implements IMobileFactory { /* (non-Javadoc) * @see com.lotus.test.factory.IMobileFactory#createMobile() */ @Override public Mobile createMobile() { return new IphoneMobile(); } }
/* * @(#)MotoMobileFactory.java 2014-3-17 */ package com.lotus.test.factory.createor; import com.lotus.test.factory.IMobileFactory; import com.lotus.test.factory.Mobile; import com.lotus.test.factory.product.MotoMobile; /** * Moto手机工厂类 * @author Administrator * @version 2014-3-17 * @since 1.0 */ public class MotoMobileFactory implements IMobileFactory { /* (non-Javadoc) * @see com.lotus.test.factory.IMobileFactory#createMobile() */ @Override public Mobile createMobile() { return new MotoMobile(); } }
上面代码完成了,以上代码就是对类图的描述。那么我们看看客户端是怎么利用工厂生产出手机,怎么使用手机的
/* * @(#)Client.java 2014-3-17 */ package com.lotus.test.factory; import com.lotus.test.factory.createor.IphoneMobileFactory; import com.lotus.test.factory.createor.MotoMobileFactory; /** * 描述当前类的作用 * @author Administrator * @version 2014-3-17 * @since 1.0 */ public class Client { /** * @param args */ public static void main(String[] args) { //创建Iphone手机工厂 IMobileFactory iphoneFactory = new IphoneMobileFactory(); //创建Moto手机工厂 IMobileFactory motoFactory = new MotoMobileFactory(); //生产一部Iphone手机 Mobile iphone = iphoneFactory.createMobile(); //生产一部Moto手机 Mobile moto = motoFactory.createMobile(); //测试用IPhone手机打电话发短信 iphone.call(); iphone.sendMessage(); //测试用Moto手机打电话发短信 moto.call(); moto.sendMessage(); } }
通过上面的代码我们得出以下:
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法吧简单工厂的内部逻辑判断移动到了客户端代码中进行。如果想加功能,本来是改工厂类,而现在只是修改客户端。
2014/03/17 tsface 南京
hanily@msn.com
相关推荐
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
**设计模式——简单工厂模式** 简单工厂模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。在简单工厂模式中,一个专门的类(称为工厂类)负责创建对象,客户端无需知道所创建的对象的具体类,只需要...
Android之大话设计模式——:抽象工厂模式借鉴.pdf
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得系统对产品类的依赖降低到最低,同时也方便了产品的扩展和...
2. **工厂模式**:定义一个创建对象的接口,让子类决定实例化哪一个类。工厂模式使代码更加灵活,避免了硬编码具体类名。分为简单工厂、工厂方法和抽象工厂三种类型。 3. **观察者模式**:定义对象之间的一对多依赖...
在学习和应用抽象工厂模式时,理解其核心思想——封装变化和解耦,以及如何在实际项目中选择合适的场景使用这一模式,是非常关键的。对于软件工程专业的学生来说,掌握这一模式不仅可以提升编程能力,还能提高对软件...
简单工厂模式,也称为静态工厂模式,是一种创建型设计模式,它提供了一个静态方法来创建对象,而无需暴露实例化逻辑。在简单工厂模式中,一个单一的工厂类负责生产所有相关类型的实例。这种模式适用于产品种类较少且...
Android之大话设计模式——:抽象工厂模式参考.pdf
《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...
Java设计模式——工厂设计模式详解 在软件设计中,工厂设计模式是一种常用的设计模式,主要用于实例化有共同接口的类。Java设计模式——工厂设计模式是Java中的一种常用的设计模式,主要用于实例化有共同接口的类。...
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了客户端代码与具体产品类之间的耦合度。在本实验中,我们将深入理解和应用C#语言实现简单工厂模式。 简单工厂模式的...
### 设计模式——基于C#的工程化实现及扩展 #### 概述 本书旨在向读者展示如何利用C# 2.0语法有效地实现和应用设计模式,使其不仅仅局限于简单的例子,而是能够在实际工程项目中发挥重要作用。全书分为七个部分,...
设计模式是一种在软件设计中被广泛认可的解决特定问题、经过良好记录并可重用的解决方案。它们代表了在各种编程环境中反复出现的问题的最佳实践。原版的设计模式通常指的是最初由“Gang of Four”(GoF)在他们的...
在《设计模式——约会版》这一独特视角下探讨的设计模式,并非我们传统意义上的面向对象设计模式(如工厂模式、单例模式等),而是通过模拟约会场景,将抽象的设计原则与实际生活中的互动策略相结合,以此来形象地...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
2. **抽象工厂模式**: 抽象工厂模式则更进一步,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在多线程或者跨平台的C#应用中,抽象工厂可以帮助我们隔离产品族,使得更换产品族变得...