Spring中使用到的设计模式(四)----工厂方法模式

1. 工厂方法模式

1.1 什么是工厂方法模式

工厂方法模式是对简单工厂模式进一步的解耦,因为在工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。

1.2 UML图

1.3 优缺点

优点:工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程;

缺点:每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量。

2. 工厂方法模式的代码实现

/**

 * 公共操作抽象类

 */

public interface Operation {

public double getResult(double numberA,double numberB) throws Exception;

}

/**

 * 加法计算实现类

 */

public class Add implements Operation{

@Override

public double getResult(double numberA, double numberB) throws Exception {

return numberA + numberB;

}

}

/**

 * 减法计算实现类

 */

public class Sub implements Operation{

@Override

public double getResult(double numberA, double numberB) throws Exception {

return numberA-numberB;

}

}

/**

 * 工厂接口

 */

public interface Factory {

public Operation createOperation();

}

/**

 * 加法类工厂

 */

public class AddFactory implements Factory{

@Override

public Operation createOperation() {

System.out.println("加法运算");

    return new Add();

}

}

/**

 * 减法类工厂

 */

public class SubFactory implements Factory{

@Override

public Operation createOperation() {

System.out.println("减法运算");

    return new Sub();

}

}

/**

 *  客户端

 */

public class Client {

public static void main(String[] args) throws Exception {

        // 使用反射机制实例化工厂对象,因为字符串是可以通过变量改变的

        Factory addFactory = (Factory) Class.forName("demo6.AddFactory").newInstance();

        Factory subFactory=(Factory) Class.forName("demo6.SubFactory").newInstance();

 

        // 通过工厂对象创建相应的实例对象

        Operation add = addFactory.createOperation();

        Operation sub = subFactory.createOperation();

 

        System.out.println(add.getResult(1, 1));

        System.out.println(sub.getResult(1, 1));

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值