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

    demo4

    用properties保存了全部子类信息,通过代码进行操作

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

                
    //通过Class类来完成 通过包名和类名来实例化这个类
            
    //这个方法返回的是object需要一个转型
            try {
                f
    =(Fruit)Class.forName(type).newInstance();
            } 
    catch (Exception e) {
                
                e.printStackTrace();
            }
            
    return f;
        }
    }
    //定义一个类来完成从键盘可以输入
    class InputData{
        BufferedReader buf
    =null;

        
    public InputData() {
            buf
    =new BufferedReader(new InputStreamReader(System.in));
        }
        
    public String getString(){
            String str 
    = null ;
            
    try
            {
                str 
    = buf.readLine() ;
            }
            
    catch (Exception e)
            {
            }
            
    return str ;
        }
        
    }
    public class factoryDemo4 {
        
    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("没有发现这个类型。");
            }
               
    */
            
    //以下是对3的修改
            Properties p = new Properties() ;
            p.setProperty(
    "a","com.miao.factoryDeom4.Apple");
            p.setProperty(
    "b","com.miao.factoryDeom4.Orange");
            
    //告诉用户的代码与类的映射
            System.out.println(p) ;
            
    // 加入一个可以从键盘输入数据的类
            System.out.print("输入要使用的子类代码:") ;
            String code 
    = new InputData().getString() ;
            System.out.println(p.getProperty(code)) ;
            Fruit f 
    = Factory.getFruitInstance(p.getProperty(code)) ;
            
    if(f!=null)
            {
                f.grow() ;
                f.pick() ;
            }
            
    else
            {
                System.out.println(
    "没有发现这个类型。") ;
            }
        }
    }

  • 相关阅读:
    [WCF安全系列]从两种安全模式谈起
    为自定义配置的编辑提供”智能感知”的支持
    在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?
    [WCF安全系列]实例演示:TLS/SSL在WCF中的应用[HTTPS]
    [WCF安全系列]谈谈WCF的客户端认证[Windows认证]
    在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回
    [转] Leaving patterns & practices
    两个简单的扩展方法:TrimPrefix和TrimSuffix
    Oracle 系统表
    让IoC动态解析自定义配置(提供基于Unity的实现)
  • 原文地址:https://www.cnblogs.com/zhxiaomiao/p/1409945.html
Copyright © 2011-2022 走看看