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 }
    利用反射改进
  • 相关阅读:
    Redis学习手册(实例代码)
    来博客园一年了
    Redis学习手册(管线)
    Redis学习手册(持久化)
    Redis学习手册(目录)
    在博客园的第100篇博客
    Redis学习手册(主从复制)
    Redis学习手册(内存优化)
    JS弹出模式提示窗体,实现页面其他地方不可编辑效果
    prototype属性使用说明
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/6682116.html
Copyright © 2011-2022 走看看