zoukankan      html  css  js  c++  java
  • 使用反射机制的情况

    摘自:

    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中就不用跟着添加代码啦!

    谢谢!
  • 相关阅读:
    angular4(2-1)angular脚手架引入第三方类库(jquery)
    angular4(1)angular脚手架
    vue-cli中的ESlint配置文件eslintrc.js详解
    咕着的题(慢慢补吧)
    图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别
    乐视手机H5项目总结
    解决ios下的微信打开的页面背景音乐无法自动播放
    html2canvas手机端模糊问题
    H5 canvas绘制出现模糊的问题
    hammer.js中文文档
  • 原文地址:https://www.cnblogs.com/ylxn/p/10227794.html
Copyright © 2011-2022 走看看