zoukankan      html  css  js  c++  java
  • 工厂模式三

    工厂模式三

    demo3:

    下面可以看到修改后的factory以后扩充类时不用修改即可

    新的问题:
     *      在项目中可能用几十个类同时实现了一个接口,用户是如何知道已有的接口子类呢?
     *      我们 可以用代号-->子类的包.类名称,我们通过代号去访问,再给用户一个文件列表给用户列出全部的代码--子类的映射

    Code
    class Factory {
        
    public static Fruit getFruitInstance(String type) {
            Fruit f 
    = null;

                
    //通过Class类来完成 通过包名和类名来实例化这个类
            
    //这个方法返回的是object需要一个转型
            try {
                f
    =(Fruit)Class.forName("com.miao.factoryDemo3"+type).newInstance();
            } 
    catch (Exception e) {
                
                e.printStackTrace();
            }
            
    return f;
        }
    }

    public class factoryDemo3 {
        
    public static void main(String args[]) {
            
    // 以下是以前紧密耦合的工厂使用方法,子类与父类紧紧结合
            /**
             * Fruit f=new Apple(); f.grow(); f.pick();
             
    */
            
    // //////////////////////////////
            /**
             * //下面用上面的类Factory来实现 Fruit f=Factory.getFruitInstance(); f.grow();
             * f.pick(); /////////////////////////////
             
    */

            
    // demo2 中对其进行修改
            if (args.length == 0) {
                System.out.println(
    "请输入要使用的类名称:");
                System.exit(
    1);
            }

            Fruit f 
    = Factory.getFruitInstance(args[0]);
            
    if (f != null) {
                f.grow();
                f.pick();
            } 
    else {
                System.out.println(
    "没有发现这个类型。");
            }

        }
    }

  • 相关阅读:
    Spring的事务管理
    C#的WinForm中制作饼状图和柱状图
    .net+mssql制作抽奖程序思路及源码
    C#中简单调用MD5方法以及MD5简介
    【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式
    C#调用C/C++动态库 封送结构体,结构体数组
    【好文翻译】测试必看:使用Spire.XLS来生成自动化报表!
    浅析C#基于TCP协议的SCOKET通信
    C# RSA和Java RSA互通
    C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)
  • 原文地址:https://www.cnblogs.com/zhxiaomiao/p/1409943.html
Copyright © 2011-2022 走看看