一 简单工厂模式

简单工厂模式

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

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

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

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

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();     
    }
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章