1 工厂模式简单介绍

工厂模式的定义:简单地说,用来实例化对象,取代new操作。

工厂模式专门负责将大量有共同接口的类实例化。工作模式能够动态决定将哪一个类实例化。不用先知道每次要实例化哪一个类。

工厂模式能够分一下三种形态:

简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory)。

工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic
Factory)。

抽象工厂 (Abstract Factroy)模式:又称工具箱模式(kit)。

1.1简单工厂模式(静态工厂模式):

简单工厂模式有三个角色: 1. 抽象产品接口 2. 详细产品类 3. 工厂类。

1.2简单工厂模式的实现(建一个simpleFactory包。全部程序放在该包下):

(1)首先建一个抽象产品接口(Computer.java)。

package simpleFactory;
public interface Computer {
public void run();
}

(2)建三个详细产品类(Dell.java、Lenovo.java、Asus.java),须要实现Computer接口。

package simpleFactory;
public class Dell implements Computer {
public void run() {
System.out.println("戴尔电脑执行了");
}
} package simpleFactory;
public class Lenovo implements Computer {
public void run() {
System.out.println("联想电脑执行了");
}
}
package simpleFactory;
public class Asus implements Computer {
public void run() {
System.out.println("华硕电脑执行了");
}
}

(3)建一个工厂类(ComputerFactory.java)。

package simpleFactory;
public class ComputerFactory {
public static Computer makeComputer(String ComputerName)throws Exception {
if(ComputerName.equals("dell")){
return new Dell();
}else if(ComputerName.equals("lenovo")){
return new Lenovo();
}else if(ComputerName.equals("asus")){
return new Lenovo();
}else{
throw new Exception();
}
}
}

(4)建一个client程序(TestSimpleFactory.java)測试。

package simpleFactory;
public class TestSimpleFactory {
public static void main(String []args)throws Exception{
Computer computer=ComputerFactory.makeComputer("dell");
computer.run();
}
}

执行输出:

戴尔电脑执行了

从输出能够看出,工厂类依据不同的參数生成出不同的对象。不用亲自 new 对象。

这就是简单工厂模式。简单工厂模式使得client不用负担起创建对象的责任,仅仅负责拿对象使用。在这样的模式中,对于产品是符合开闭原则的(对扩展开放,对改动封闭)。可是对于工厂部分就不符合这个原则了,每添加一种品牌电脑都要改动一下工厂类的代码。而且这个工厂类做了全部的东西。是一个上帝类,当它出了问题,全部东西都不能运作了,由于它提供的是静态方法,无法继承,所以无法提供具有继承等级结构的工厂角色,无法与有等级结构的产品相应起来,所以我们要改进这个工厂部分,就是接下来要分析的工厂方法模式。

(7)最后。我们再看一下简单工厂模式的UML图。

图1.1 简单工厂模式

推荐文章:

浅析JAVA设计模式之工厂模式(二)

http://blog.csdn.net/minidrupal/article/details/38323457

Author: Vicky

Introduction: 教育工作者

Sign: 前事之不忘,后事之师

浅析JAVA设计模式之工厂模式(一)的更多相关文章

  1. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  2. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  3. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  4. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  5. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  6. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  7. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  8. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

  9. java设计模式之一工厂模式

    简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...

随机推荐

  1. [置顶] Jsp中的table多表头导出excel文件

    首先引入两份JS:copyhtmltoexcel.js以及 tableToExcel.js /* * 默认转换实现函数,如果需要其他功能,需自行扩展 * 参数: * tableID : HTML中Ta ...

  2. TCP的三次握手和四次挥手(转)

    注:主动.被动 与 服务器.客户端没有明确的对应关系. 这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深 ...

  3. 基础知识(9)- Swing用户界面组件

    9.1 Swing和模型-视图-控制器设计模式  9.1.1 设计模式  9.1.2 模型-视图-控制器模式  9.1.3 Swing按钮的模型-视图-控制器分析 9.2 布局管理概述  9.2.1 ...

  4. POJ 3321 Apple Tree DFS序+fenwick

    题目大意:有一颗长满苹果的苹果树,有两个操作. 1.询问以一个点为根的子树中有多少个苹果. 2.看看一个点有没有苹果,假设没有苹果.那么那里就立即长出一个苹果(= =!):否则就把那个苹果摘下来. 思 ...

  5. HDU 1863 畅通project (最小生成树是否存在)

    题意 中文 入门最小生成树  prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...

  6. 转载【浅谈ThreadPool 线程池】

    浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

  7. Delphi 实现无窗口移动(详细使用WM_NCHITTEST和PtInRect API进行测试)

    procedure imgListMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) ...

  8. poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...

  9. 深入理解 JBoss 7/WildFly Standalone 模式启动过程

    概述 JBoss 7/WildFly Standalone 模式启动过程大致例如以下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBo ...

  10. HDU 1240——Asteroids!(三维BFS)POJ 2225——Asteroids

    普通的三维广搜,须要注意的是输入:列,行,层 #include<iostream> #include<cstdio> #include<cstring> #incl ...