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

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)建一个客户端程序(TestSimpleFactory.java)测试。

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

运行输出:

戴尔电脑运行了

从输出可以看出,工厂类根据不同的参数生成出不同的对象,不用亲自 new 对象。这就是简单工厂模式,简单工厂模式使得客户端不用负担起创建对象的责任,只负责拿对象使用。在这种模式中,对于产品是符合开闭原则的(对扩展开放,对修改封闭),但是对于工厂部分就不符合这个原则了,每增加一种品牌电脑都要修改一下工厂类的代码,并且这个工厂类做了所有的东西,是一个上帝类,当它出了问题,所有东西都不能运作了,因为它提供的是静态方法,无法继承,所以无法提供具有继承等级结构的工厂角色,无法与有等级结构的产品对应起来,所以我们要改进这个工厂部分,就是接下来要分析的工厂方法模式。

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

图1.1 简单工厂模式

Author: Vicky

Introduction: 教育工作者

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

浅析JAVA设计模式之工厂模式(一),布布扣,bubuko.com

时间: 07-29

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

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

1 工厂方法模式简介 工厂方法 (Factroy Method) 模式:又称多态性工厂模式(Polymorphic Factory),在这种模式中,核心工厂不再是一个具体的类,而是一个抽象工厂,提供具体工厂实现的接口,具体创建产品交由子工厂去做,抽象工厂不涉及任何产品被实例化的细节.而不同等级的产品,就对应一个不同等级的工厂,如下图. 图1 1.1工厂方法模式(多态性工厂模式): 工厂方法模式有三个角色: 1. 抽象产品接口 2. 具体产品类 3. 抽象工厂接口 4.具体工厂类. 1.2工厂方法

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

在阅读本文之前,请先阅读(一)和(二)中的简单工厂模式和工厂方法模式. 1抽象工厂模式简介 抽象工厂 (Abstract Factroy) 模式:工具箱模式(kit).抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,如下图. 图1.1 上图左边有一个工厂类的等级结构,右边有两个不同的产品等级结构,分别是产品A的等级结构和产品B的等级结构,工厂1和工厂2分别负责不同一个产品等级,同一个产品族的产品的生产.又例如下图: 图1.2 上图表示的是Button和Text两个不同产品的等级

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

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

抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关的代码.由应用程序调用以创建对应的具体产品的对象.在java中它由具体的类来实现.抽象产品角色:它是具体产品继承的父类或者是实现的接口.在java中一般

java设计模式--简单工厂模式

 简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大量共同定义的接口. (2) 由不同的对象去实现该接口. (3) 子类(具体工厂类)决定实例化哪一个类(具体产品类)有着“一对一”的关系. 前言(也算是工厂的一个应用需求场景吧) 最近在构建自动化测试平台,公司需求是:必须在IE,火狐,Google浏览器下回归测试用例.Selenium的webdriv

Java设计模式——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是属于创建型的设计模式,意在创造一个抽象的工厂,而后再由实例化出的具体的工厂来进行生产. 何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品. 应用实例:工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品).时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装.商务男装.时尚女装.时尚男装,这些也都是成套的,即一系列具体产品.假设一种情况(现实中是不存在的,要不然

Java设计模式——简单工厂模式

1.    简单工厂模式 1.1 概述 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例. 1.2 优点 客户端不需要在负责对象的创建,从而明确了各个类的职责. 1.3 缺点 这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护 2.     代码 Animal抽象类-Animal.java package cn.itcast_01; public abstract class Animal { public

Java设计模式——抽象工厂模式(Abstract factory)

抽象工厂模式可以向客户提供接口,使得客户端在不必指定产品具体类型的情况下创建多个产品族中的产品对象. 系统的设计 采用抽象工厂模式设计出的系统类图如下: 从上图可以看出,抽象工厂模式涉及到角色: 抽象工厂角色(AbstractFactory):担任这个角色的是工厂方法模式的核心,它与应用系统的商业逻辑无关.通常使用Java接口或者抽象Java类实现,而所有的具体工厂类都必须实现这个Java接口或者继承这个抽象Java类. 具体工厂类(ConcreteFactory)角色:这个角色直接在客户端的调

JAVA设计模式之工厂模式

以下代码仅供展示工厂模式,不能直接编译,因为一个文件中最多只能有一个public class. 一.简单工厂模式:比较简单,produceProduct方法最好是静态的.它是根据参数来决定返回哪一种类型的product. 1 public interface Product 2 { 3 public void getName(); 4 } 5 6 public class ProductA implements Product 7 { 8 public void getName() 9 { 10