JAVA工厂模式优缺点_简单工厂模式的介绍、优缺点分析和解决方案

标签:

所有的模式都是利用java中的封装、继承、多态这三个特性张开的,就像由这三个秘籍组成的各种变幻万千的招式,而所有的目的都是为了打败坏模式带来的代码垃圾这个敌人,所有的招式都是要求“可维护”、“可扩展”、“可复用”,当然如果达到这三个标准后,基本上“灵活性好”同时也就拥有了。所以下面介绍最常用的工厂模式,分为三类:简单工厂模式、工厂模式和抽象工厂模式。

一、简单工厂模式

1.介绍

工厂模式,顾名思义,最少有一个生产产品的机器存在的工厂Factory,与此同时,也要有一个构建好的产品模块Product。所以,我们要用到Factory来创造Product。在简单工厂模式中,有几种角色存在。一个是所有产品的父类P,即所有产品的模板;另外一个是继承了父类P的产品子类p1,p2...;当然,最重要的是Factory,在Factory中可以将这些的产品实例化,根据需求来将Factory和Product产生联系。

2.例子

我们先来做一个例子吧,以做一个简单的计算器来开始。

a.  Product的父类: Operation

public class Operation {

private double _numberA = 0 ;

private double _numberB = 0;

private double result = 0;

public double get_numberA() {

return _numberA;

}

public void set_numberA(double _numberA) {

this._numberA = _numberA;

}

public double get_numberB() {

return _numberB;

}

public void set_numberB(double _numberB) {

this._numberB = _numberB;

}

public double getResult() {

return result;

}

public void setResult(double result) {

this.result = result;

}

}

b.继承了Product的子类:加法产品(OperationAdd),乘法产品(OperationMul),减法产品(OperationSub),除法产品(OperationDiv)

public classOperationAddextendsOperation{

@Override

public double getResult(){

double result = 0;

result = get_numberA() + get_numberB();

return result;

}

}

public class OperationSub extends Operation{

@Override

public double getResult(){

double result = 0 ;

result = get_numberA() - get_numberB();

return result;

}

}

public class OperationMul extends Operation {

@Override

public double getResult(){

double result = 0;

result = get_numberA()*get_numberB();

return result;

}

}

public class OperationDiv extends Operation{

@Override

public double getResult(){

double result = 0 ;

if(get_numberB() == 0){

throw new RuntimeException("除数不能为0.");

}else{

result = get_numberA()/get_numberB();

return result;

}

}

}

c.生产产品的工厂Factory(OperationFactory)

package SimpleFactory;

public class OperationFactory {

public static Operation createOperation(String operate){

Operation oper = null;

switch(operate)

{

case "+" :

oper = new OperationAdd() ;

break;

case "-" :

oper = new OperationSub() ;

break;

case "*" :

oper = new OperationMul() ;

break;

case "/" :

oper = new OperationDiv() ;

break;

}

return oper;

}}

最后我们把工厂和产品做好以后就可以,将产品买给客户啦。

public class Client {

public static void main(String[] args) {

test();

}

public static void test(){

Operation oper = OperationFactory.createOperation("+");

oper.set_numberA(1);

oper.set_numberB(2);

double result = oper.getResult();

System.out.println(result);

}

}

结果当然是:3.0啦。

这就是最简单的工厂模式,说到优点,这个简单工厂用了java中继承,将决定工厂的生产什么产品的决定权直接交到了客户手中,然后客户在输入自己的需求,得到最终的结果。

这样模块清晰化,每个部分都各司其职,分工明确,代码就实现最渐层意义上的“可维护”啦。说到缺点,当我们需要增加一产品,比如在计算机中加入一个新的功能,可以求M的N次方,这样个小功能我们就要去添加一个新的类,同时我们需要在Factory中改动到switch里面的代码,这是耦合性很高的表现啦,所以我们就有了“工厂模式”的出现啦。

标签:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值