一 简单工厂模式

来源:互联网 发布:2015nba西部决赛数据 编辑:程序博客网 时间:2024/04/25 18:53

简单工厂模式

定义:又叫做静态工厂方法模式,通过定义专门一个类来负责创建
其他类的实例,而被创建的其他类实例一般具有共同的父类。

角色:分别为:工厂角色、抽象角色和具体实例角色。

通过对每个类实例的抽象,抽象出共同的父类(通常以接口的形式创建),作为抽象角色。然后再工厂角色中,根据传递的参数,创建具体类实例。

下面以具体的代码进行讲解:
首先来看下具体类:
例如:

public class Apple{    public void get(){        System.out.println("Apple");    }}public class Banana{    public void get(){        System.out.println("Banana");    }}

上面定义了两个具体类分为苹果类和香蕉类。可以看到他们都有get方法,因此可以定义一个水果接口类,作为抽象角色。
类如:

public interface Fruit {    public void get();}

下面修改下上面的具体类,使他们实现该抽象接口。

public class Apple implements Fruit{    public void get(){        System.out.println("Apple");    }}public class Banana implements Fruit{    public void get(){        System.out.println("Banana");    }}

现在已经有了抽象角色和具体实例角色,还差工厂角色。那该如何创建工厂角色呢。请看下面的代码:

public class FruitFactory {    public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {        if(type.equalsIgnoreCase("apple")) {            return Apple.class.newInstance();        } else if(type.equalsIgnoreCase("banana")) {            return Banana.class.newInstance();        } else {            System.out.println("找不到相应的实例化类");            return null;        }    }}

那么,该如何调用呢,请看代码:

public class Test {    public static void main(String[] args) throws InstantiationException, IllegalAccessException {          Fruit apple = FruitFactory.getFruit("Apple");        Fruit banana = FruitFactory.getFruit("Banana");        apple.get();        banana.get();    }}

上面介绍了简单工厂模式。但是工厂角色中创建实例的代码比较繁琐,我们可以更改为更为简单的方式,如下:

public class FruitFactory {    public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {            Class fruit = Class.forName(type);            return (Fruit) fruit.newInstance();         }}

上面的代码虽然简洁,但是要注意调用的时候,参数要与具体类名一致。

0 0
原创粉丝点击