2018-06-21学习小结 - 对象的引用与传递8

学习

范例 17-10 传统的工厂设计模式

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年6月21日 下午11:33:43
 * @Description TODO 传统的工厂设计模式
 */
public class P448_17_10 {

    public static void main(String[] args) {
        Book9 book = Factory1.getInstance("mathbook"); // 实例化一个对象
        System.out.println(book.getTitle());
    }

}

interface Book9 {
    public String getTitle();
}

class MathBook implements Book9 {

    @Override
    public String getTitle() {
        return "数学类图书";
    }

}

class Factory1 { // 工厂类
    public static Book9 getInstance(String className) {
        if ("mathbook".equals(className)) {
            return new MathBook();
        }
        return null;
    }
}

运行结果:

2018-06-21学习小结 - 对象的引用与传递8_第1张图片
运行结果

新增子类时,工厂类的new就会有耦合,需要更改,使用反射机制来避免此类耦合。

范例 17-11 使用反射机制的工厂模式

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年6月22日 上午12:44:58
 * @Description TODO 使用反射机制的工厂模式
 */
public class P449_17_11 {

    public static void main(String[] args) {
        Book10 book = Factory2.getInstance("com.Javastudy2.ComputerBook1"); // 实例化一个对象
        System.out.println(book.getTitle());
    }

}

interface Book10 {
    public String getTitle();
}

class MathBook1 implements Book10 {

    @Override
    public String getTitle() {
        return "数学类图书";
    }

}

class ComputerBook1 implements Book10 { // 新子类

    @Override
    public String getTitle() {
        return "计算机类图书";
    }

}

class Factory2 { // 工厂类
    public static Book10 getInstance(String className) {
        Book10 book = null;
        try {
            book = (Book10) Class.forName(className).newInstance(); // 反射机制
        } catch (Exception e) {
            e.printStackTrace();
        }
        return book;
    }
}

小结

实例化对象通过反射机制完成了解耦。


记于2018年6月22日01:08:58
By Yvan

你可能感兴趣的:(2018-06-21学习小结 - 对象的引用与传递8)