zoukankan      html  css  js  c++  java
  • 简单工厂

    简单工厂模式的概念 

    就是创建一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的是实质是由一个工厂类根据传入的参数,动态决定应该的创建哪一产品类的实例。

      简单工厂模式的代码:

    /**
     * 产品的抽象接口  人类
     *
    
     */
    public interface Human {
        
        public void say();
    
    }
    

     然后定义男人和女人,同样有说话的方法。

    /**
     * man  男人
     */
    public class Man implements Human {
    
        @Override
        public void say() {
            System.out.println("男人");
        }
    
    }
    
    /*女人
     */
    public class Woman implements Human {
    
        @Override
        public void say() {
            System.out.println("女人");
        }
    
    }
    

      写一个工厂类,用来创建男人和女人

    第一种方法是使用逻辑判断的方法实现的

    /**
     * 简单工厂
     *
     */
    public class SampleFactory {
        public static Human makeHuman(String type){
            if(type.equals("man")){
                Human man = new Man();
                return man;
            }else if(type.equals("womman")){
                Human woman = new Woman();
                return woman;
            }else{
                System.out.println("生产不出来");
                return null;
            }            
        }
    }
    

      第二种方法是使用放射实现的,我觉得这一类的实现方式比较好。

    /**
     * 简单工厂放射实现
     *
     */
    public class SampleFactory1 {
        public static Human makeHuman(Class c){
            Human human = null;
            try {
                human = (Human) Class.forName(c.getName()).newInstance();
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                System.out.println("不支持抽象类或接口");
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("没有足够权限,即不能访问私有对象");
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                System.out.println("类不存在");
                e.printStackTrace();
            }    
            return human;
        }
    }
    

      创建测试类

    /**
     * 简单工厂测试
     *
     */
    public class Client {
        public static void main(String[] args) {
    //        Human man = SampleFactory.makeHuman("man");
    //        man.say();
    //        Human womman = SampleFactory.makeHuman("womman");
    //        womman.say();
    //        Human test = SampleFactory.makeHuman("tttt");
            
            Human man = SampleFactory1.makeHuman(Man.class);
            man.say();
            Human woman = SampleFactory1.makeHuman(Woman.class);
            woman.say();
        }
    }
    

      

  • 相关阅读:
    November 07th, 2017 Week 45th Tuesday
    November 06th, 2017 Week 45th Monday
    November 05th, 2017 Week 45th Sunday
    November 04th, 2017 Week 44th Saturday
    November 03rd, 2017 Week 44th Friday
    Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
    图片方向 image orientation Exif
    Asp.net core 学习笔记 ( Router 路由 )
    Asp.net core 学习笔记 ( Configuration 配置 )
    qrcode render 二维码扫描读取
  • 原文地址:https://www.cnblogs.com/cuixiaomeng/p/6875136.html
Copyright © 2011-2022 走看看