Java中的简单工厂模式

思路

  • 首先定义一个实例的接口,实现该接口,得到多种实例(其实就是各种产品)
  • 创建一个工厂,工厂使用某种方式创建实例并返回该实例,外界调用者不需要知道具体实现方式;实例的创建方式一定要很容易的加载到工厂中,这样有利于修改。

    在本文中使用反射机制创建实例,通过读取hash映射表将实例的路径名传递给反射参数,工厂用反射将创建的实例返回给调用者。

1.定义person的接口

public interface Person {
    public String getName();
}

2.实现person的3个实例

public class Hero_ADC implements Person{

    private String name=null;

    @Override
    public String getName() {
        return "我是ADC寒冰!";
    }

}

public class Hero_ap implements Person{

    @Override
    public String getName() {
        return "我是ap中单妖姬!";
    }

}

public class Hero_shangdan implements Person{

    @Override
    public String getName() {
        return "我是上单剑姬!";
    }

}

3.定义hash映射表

这里使用了java中的properties文件,在工程路径下放了一个heros.properties文件

adc=heros.Hero_ADC
ap=heros.Hero_ap
shangdan=heros.Hero_shangdan

4.利用工厂创建实例并返回

这里读取路径使用绝对路径,只是为了演示思路,实际应用中最好不要这样做(代码要在各种平台上运行),考虑别的的方式,比如数据库。

public  class  Factory {

    public static Person getHero(String position) {

        /**
         * 读取heros表里的数据,获取反射的路径
         */
        Properties prop=new Properties();
        try {
            prop.load(new      FileInputStream("HeroTable/heros.properties"));  
        } catch (FileNotFoundException e1) {

        } catch (IOException e1) {
            e1.printStackTrace();
        }

        /**
         * 通过反射创建实力Person
         */
        try {

            return (Person)Class.forName(prop.
            getProperty(position)).newInstance();

        }catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

}

5.进行一下测试

public class DemoTest {
    public static void main(String[] args) {
    System.out.println(Factory.getHero("shangdan")
    .getName());
    }
}

控制台输出:我是上单剑姬!

简单工厂模式的思路就是这样,利用工厂来产生实例,在工厂中很容易添加或删除实例的创建方法,从而使得实例可以有一系列,增加了程序的可维护性和灵活性。复杂的工厂模式是在此基础上进行更高的抽象,就不在此列举了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值