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 }
    利用反射改进
  • 相关阅读:
    TransactionScope和Enterprise Libray 3.0 Data Access Application Block
    C#之父 Anders Hejlsberg
    openSUSE Linux 10.2 多语言版
    承蒙各位朋友支持与厚爱,荣获asp.net MVP荣誉
    如何在ASP.NET 2.0中定制Expression Builders
    检查Python对象
    IronPython中使用Cecil类库指南
    MSDN Magazine 4月份asp.net文章
    Reflector 插件
    WSS v3的Form身份认证
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/6682116.html
Copyright © 2011-2022 走看看