zoukankan      html  css  js  c++  java
  • 【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 }
    利用反射改进
  • 相关阅读:
    课程教学网站(大三上课设)
    mybatis+servlet
    第一个struct2(Hello_World)
    servlet入门
    mybatis入门项目
    XML
    状态模式的介绍及状态机模型的函数库javascript-state-machine的用法和源码解析
    10个JavaScript难点
    markdown基本语法
    Mac OSX 平台安装 MongoDB
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/6682116.html
Copyright © 2011-2022 走看看