簡單工廠加反射是OCP原則的很好體現。網上已經有不少的例子了,可是這種東西,只有本身想出一個例子,纔算是本身的。java
下面的代碼中一個五個類。ide
TestSimpleFactory是用來測試的驅動。 測試
IAnimal是一個接口,聲明瞭一個動物類的行走go的方法。spa
Chicken實現了IAnimal接口,表示小雞,Chicken實現go。只是簡單輸出Chicken Run。小雞的走的方式是奔跑。對象
Duck也實現了IAnimal接口,表示小鴨,Duck實現go。只是簡單輸出Duck。小鴨的走的方式是游泳。blog
AnimalFactory是一個簡單工廠,用來生產小雞或小鴨。接口
TestSimpleFactory.javaget
public class TestSimpleFactory { string
public static void main(String[] args) {
- PropertyReader reader=new PropertyReader("factory.properties");
- String type=reader.getProperty("factory");
- IAnimal animal=AnimalFactory.createAnimal(type);
- animal.go();
- }
- }
IAnimal.javait
- public interface IAnimal {
- void go();
- }
Chicken.java
- public class Chicken implements IAnimal{
- public void go() {
- System.out.println("Chicken Run");
- }
- }
Duck.java
- public class Duck implements IAnimal {
- public void go() {
- System.out.println("Duck Swim");
- }
- }
AnimalFactory.java
- public class AnimalFactory {
- public static IAnimal createAnimal(String name)
- {
- try {
- Class c=Class.forName(name);
- return (IAnimal)c.newInstance();
- } catch (ClassNotFoundException e) {
- System.out.println("This class doesn't exsist!");
- e.printStackTrace();
- } catch (InstantiationException e) {
- System.out.println("This class can't be instantiated!");
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
其中具體要建立的對象防止factory.properties中。
動物的子類實例化的時候用到了反射。
factory.properties中的內容爲:
- factory=neu.swc.tzy.Car