疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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