• 【java】工厂模式Factory,利用反射改进


     1 package 反射;
     2 interface Product{
     3     public void produce();
     4 }
     5 class socks implements Product{
     6     @Override
     7     public void produce() {
     8         System.out.println("袜子被生产");
     9     }
    10 }
    11 /*
    12 class shoes implements Product{
    13     @Override
    14     public void produce() {
    15         System.out.println("鞋子被生产");
    16     }
    17 }
    18 */
    19 class Factory{
    20     private static Product product;
    21     public static Product getInstance(String productName){
    22         if(productName.equals("袜子"))
    23             product=new socks();
    24         /*每添加一个产品就得增加getInstance方法的代码,可以利用反射改写
    25         if(productName.equals("鞋子"))
    26             product=new shoes();
    27         */
    28         return product;
    29     }
    30 }
    31 public class TestFactory {
    32     public static void main(String[] args) {
    33         Product product=Factory.getInstance("袜子");
    34         product.produce();//袜子被生产
    35         /*
    36         Product product2=Factory.getInstance("鞋子");
    37         product2.produce();//鞋子被生产
    38         */
    39     }
    40 }
    此代码含new耦合,有待优化。
     1 package 反射;
     2 interface Product{
     3     public void produce();
     4 }
     5 class socks implements Product{
     6     @Override
     7     public void produce() {
     8         System.out.println("袜子被生产");
     9     }
    10 }
    11 
    12 class shoes implements Product{
    13     @Override
    14     public void produce() {
    15         System.out.println("鞋子被生产");
    16     }
    17 }
    18 
    19 class Factory{
    20     private static Product product;
    21     public static Product getInstance(String productName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
    22         Class<?> cls=Class.forName(productName);
    23         product=(Product)cls.newInstance();
    24         return product;
    25     }
    26 }
    27 public class TestFactory {
    28     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    29         Product product=Factory.getInstance("反射.socks");
    30         product.produce();//袜子被生产
    31         
    32         Product product2=Factory.getInstance("反射.shoes");
    33         product2.produce();//鞋子被生产
    34         
    35     }
    36 }
    利用反射改进
  • 相关阅读:
    函数指针与变长参数列表
    Finding intersection and union of two sets.
    依赖注入
    可达性分析算法
    java 虚拟机栈
    Java 堆
    java虚拟机>>程序计数器
    Java方法区(Method Area)
    Java 运行时常量池
    java引用
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/6682116.html
Copyright © 2020-2023  润新知