工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
类图结构:
下面我们通过代码实现上面的类图:
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/9877593博客中java设计模式的源代码。下载前请先看《设计模式——工厂方法模式》一文。
设计模式——抽象工厂模式源码,设计模式——抽象工厂模式源码
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
这个是http://blog.csdn.net/dawanganban/article/details/9875873博客中java设计模式的源代码。下载前请先看《设计模式——简单工厂》一文。
经典的设计模式————简单工厂模式,里面有实验文档和实验源代码还有课件助于你的学习
vs2010实现的软件设计模式——抽象工厂,是软件工程专业学生专业技能之一
Android之大话设计模式——:抽象工厂模式借鉴.pdf
Android之大话设计模式——:抽象工厂模式参考.pdf
主要介绍了Java设计模式——工厂设计模式详解,具有一定参考价值,需要的朋友可以了解下。
NULL 博文链接:https://maidoudao.iteye.com/blog/1328618
工厂模式: – 实现了创建者和调用者的分离。 – 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改...
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此 时工厂类不再负责所有产品的创建,而...下面看下工厂模式 的具体实现代码(这里还是以简单工厂模式中点菜的例子来实现):
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。...1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
简介 设计模式是为了解决一些出现的问题设计的解决方案。是长时间经验的总结,是根据...工厂模式 在类中实现一个接口创建指定对象,使一个类的实例化延迟到了子类。简单来说把类的创建都封装起来,只需要调用一个子类
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
写博客上传的代码:blog http://blog.csdn.net/t1234xy4/article/details/52424048
SETema5 软件设计模式——抽象工厂
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...