• 使用反射机制的情况


    摘自:

    https://www.zhihu.com/question/24304289/answer/147529485

    反射机制具有更高的灵活性。

    一、前提描述:

    假设在工厂模式下。有接口以及实现如下:

    (1)接口

    1 package reflectlearn;
    2 
    3 public interface Fish {
    4     void myCategory();
    5 }

    (2)实现:

    1 package reflectlearn;
    2 
    3 public class Shark implements Fish {
    4     @Override
    5     public void myCategory(){
    6         System.out.println("I am a shark");
    7     }
    8 }

    (3)工厂:

     1 package reflectlearn;
     2 
     3 public class FishFactory {
     4     public static Fish getInstance(String fn) {
     5         if ("Shark".equals(fn)) return new Shark();
     6         return null;
     7     }
     8 

    此时,如果我们继续实现FIsh的时候,则在FishFactory中要继续添加代码。不够灵活。

    二、反射机制:

    反射机制,可以对原来的类进行任意操作。增加实现,并且修改FishFactory类。

    (1)接口

    1 package reflectlearn;
    2 
    3 public interface Fish {
    4     void myCategory();
    5 }

    (2)实现:

    1 package reflectlearn;
    2 
    3 public class Shark implements Fish {
    4     @Override
    5     public void myCategory(){
    6         System.out.println("I am a shark");
    7     }
    8 }
    1 package reflectlearn;
    2 
    3 public class Tuna implements Fish{
    4     @Override
    5     public void myCategory(){
    6         System.out.println("I am a tuna");
    7     }
    8 }
    1 package reflectlearn;
    2 
    3 public class Whale implements Fish {
    4     @Override
    5     public void myCategory(){
    6         System.out.println("I am a whale");
    7     }
    8 }

    (3)工厂

     1 package reflectlearn;
     2 
     3 public class FishFactory {
     4     public static Fish getInstance(String fn) {
     5         Fish f = null;
     6         try {
     7             //先通过Class.forName()得到Class, 在通过newInstance得到实例。
     8             f = (Fish) Class.forName(fn).newInstance();
     9         } catch (Exception e) {
    10             e.printStackTrace();
    11         }
    12         return f;
    13     }
    14 
    15 }

    每添加一个实现的时候,这样在FishFactory中就不用跟着添加代码啦!

    谢谢!
  • 相关阅读:
    StackStorm简介及其部署
    Nginx系列(十二)——性能调整
    Nginx系列(十一)——通过日志进行故障排查
    Nginx系列(十)——可用性监控进阶
    Nginx系列(九)——容器/微服务
    Nginx系列(八)——数字媒体流
    Nginx系列(七)——HTTP/2
    Nginx系列(六)——安全控制
    Nginx系列(五)——认证
    Nginx系列(四)——配置文件自动化管理
  • 原文地址:https://www.cnblogs.com/ylxn/p/10227794.html
Copyright © 2020-2023  润新知