<Java设计模式>—简单工厂模式

<Java设计模式>—简单工厂模式

简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。

 

在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。

       先来看看它的组成:

 

        1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

 

        2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

 

        3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

 

下面来看下一个运算对象的简单工程的设计模式UML:

具体的对应关系:

工厂类角色——>简单工厂类

抽象产品角色——>运算类

具体产品角色——>加法类,减法类,乘法类,除法类

 

根据上面UML,写咱们的代码:

/**
* 运算类
*/
abstract class Operation{

    public double numberA;
    public double numberB;
    public abstract double getResult();
 }
/**
* 加法类(减法(OperationSub)、乘法(OperationMul)、除法(OperationDiv)请参考加法写法)
*/
class OperationAdd extends Operation{
    public double getResult(){
       return numberA+numberB;
   }
}

/**
* 简单工厂类
*/
class OperationFactory{

    public static final int ADD = 1;//加法
    public static final int SUB = 2;//减法
    public static final int MUL = 3;//乘法
    public static final int DIV = 4;//除法

    public Operation createOperation(int operationType){

    swtich(operationType){
           case ADD:
             return new OperationAdd();
             break;
           case SUB:
             return new OperationSub();
             break;
           case MUL:
             return new OperationMul();
             break;
           case DIV:
             return new OperationDiv();
             break;
     }
  }
}

/**
* 客户端代码
**/
class Client{

    public static void main(String[] args){
       Operation operation= OperationFactory.createOperation(OperationFaction.ADD);
       Operation.numberA = 22;
       Operation.numberB = 23;
       System.out.println(“远算结果:”+operation.getResult());		
   }

}


个人总结:相对于之前直接new出对象,降低了耦合性,客户端只要认识两个类(Operation、OperationFactory),也就是说客户端都无需导入像加法类,减法类等的包,客户端只需给2数,和相应的计算方式,然后得出结果,至于你是怎么运算,客户端并不关心;但是有个弊端就是假如将来需要拓展,那就比较麻烦了,那我们就必须去修改OperationFactory这个类中的switch代码,如果将来拓展很多的算法,那么这个类将是非常臃肿的。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值