简单工厂模式

简单的工厂模式:通过加载传入的字符串,返回所需特定的实现类创建的对象

这里写图片描述
接口Operation及其各种的实现类

package zx.simplefactorypattern.test1;

public interface Operation {

    public double getResult(double number1,double number2) throws Exception;    
//  public abstract double getResult(double... number1) throws Exception;   

}

class OperationAdd implements Operation{
    @Override
    public double getResult(double number1, double number2) {
        double result=0;
        return result=number1+number2;
    }

}

class OperationSub implements Operation{

    @Override
    public double getResult(double number1, double number2) {
        double result=0;
        return result=number1-number2;
    }
}

class OperationMul implements Operation{

    @Override
    public double getResult(double number1, double number2) {
        double result=0;
        return result=number1*number2;
    }
}

class OperationDiv implements Operation{
    @Override
    public double getResult(double number1, double number2) throws Exception {
        double result=0;
        if(number2==0){
            throw new Exception("除数不能为0");
        }
            result=number1/number2;
        return result;
    }
}

对象工厂

package zx.simplefactorypattern.test1;

public class OperationFactory {

    public static Operation createOperation(String operate){
        Operation opera=null;
        switch(operate){
            case "+": opera=new OperationAdd(); break;
            case "-": opera=new OperationSub(); break;
            case "*": opera=new OperationMul(); break;
            case "/": opera=new OperationDiv(); break;
        }
        return opera;
    }
}

测试

package zx.simplefactorypattern.test1;

public class Test1 {

    public static void main(String[] args) throws Exception {
        Operation operationAdd = new OperationFactory().createOperation("+");
        Operation operationSub = new OperationFactory().createOperation("-");
        Operation operationMul = new OperationFactory().createOperation("*");
        Operation operationDiv = new OperationFactory().createOperation("/");
        double n1=123;
        double n2=0;
        System.out.println(operationAdd.getResult(n1, n2));
        System.out.println(operationSub.getResult(n1, n2));
        System.out.println(operationMul.getResult(n1, n2));
        System.out.println(operationDiv.getResult(n1, n2));
    }

}

通过简单工厂模式加载以ini结尾的配置文件

/*
工厂设计模式就是用于产生对象的。
*/


public class Demo1 {

    public static void main(String[] args) throws Exception {
        Person p = (Person) getInstance();
        System.out.println(p);
    }

    //需求: 编写一个简单工厂根据配置文件中对应类名返回对应的对象。
    public static Object getInstance() throws Exception{
        //读取配置文件
        BufferedReader bufferedReader = new BufferedReader(new FileReader("f:/info.txt"));
        //读取第一行 : 读取类文件的信息
        String className = bufferedReader.readLine();
        //通过完整类名获取对应 的Class对象
        Class clazz = Class.forName(className);
        //获取到对应的构造方法
        Constructor constructor = clazz.getDeclaredConstructor(null);
        constructor.setAccessible(true);
        Object o  = constructor.newInstance(null);
        //给对象设置对应的属性值
        String line = null;
        while((line = bufferedReader.readLine())!=null){
            String[] datas = line.split("=");
            Field field =clazz.getDeclaredField(datas[0]);
            //设置可以访问
            field.setAccessible(true);
            if(field.getType()==int.class){
                field.set(o, Integer.parseInt(datas[1]));
            }else{
                field.set(o, datas[1]);
            }
        }
        return o;

    }


}

info.txt

reflect.Person
id=110
name=旺财

适用于哪些场景
1.工厂类负责创建的对象比较少;
2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
3.由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

源码:https://github.com/zxiang179/DesignPattern

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值