简单工厂

 

简单工厂模式的概念 

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

  简单工厂模式的代码:

 

/**
 * 产品的抽象接口  人类
 *

 */
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();
    }
}

  

posted @ 2017-05-18 19:19  春眠不觉笑  阅读(173)  评论(0编辑  收藏  举报