大话设计模式之工厂方法

工厂方法是一个使用很广泛的设计模式,接下来我使用对比的方式来说明工厂方法的优点与不足,与之前发表的文章简单工厂对比。

大家可以看代码实现的不同。

1.测试类

/**
 * 需求:使用面向对象的思想完成一个简易计算器
 * 可以实现+、-、*、/运算
 */
public class TestCount {
	
	public static void main(String[] args) {
		try {
//			Factory openFactory = new AddFactory(); //加法运算
			Factory openFactory = new SubFactory(); //减法运算
			Count count = openFactory.createCount(); //隐藏具体运算类的创建细节
			double num1 = 1;
			double num2 = 2;
			System.out.println("运算结果:" + count.count(num1, num2));
		}catch(Exception e) {
			System.out.println(e.getMessage());
		}
	}
}
2.定义一个运算类,有不同的实现。
public class Count {

	public double count(double num1, double num2) {
		return 0;
	}
	
}
public class AddCount extends Count {
	
	public double count(double num1, double num2) {
		return num1 + num2;
	}
	
}
public class SubCount extends Count {
	
	public double count(double num1, double num2) {
		return num1 - num2;
	}
	
}
public class MutilCount extends Count {
	
	public double count(double num1, double num2) {
		return num1 * num2;
	}
	
}
public class DivCount extends Count {
	
	public double count(double num1, double num2) {
		if (num2 == 0) {
			throw new RuntimeException("被除数不能为0");
		}
		return num1 / num2;
	}
	
}
3.定义一个工厂接口,里面有一个工厂方法,用于创建不同的产品实现。
public interface Factory {
	
	public Count createCount();
	
}
public class AddFactory implements Factory {

	public Count createCount() {
		return new AddCount();
	}

}
public class SubFactory implements Factory {

	public Count createCount() {
		return new SubCount();
	}

}
public class MutilFactory implements Factory {

	public Count createCount() {
		return new MutilCount();
	}

}
public class DivFactory implements Factory {

	public Count createCount() {
		return new DivCount();
	}

}
总结:1.封装了产品的创建过程,在简单工厂的基础上进一步进行抽象,对每一类具体的产品对象创建一个相对应的工厂,改善了简单工厂的缺点,遵循了OCP原则。2.把判断的逻辑放到了页面端,简单工厂把判断的逻辑放到了工厂里面来做,不符合OCP原则,当需求改变的时候,需要修改工厂的类,工厂方法可以使用反射来解决判断的逻辑,从而选择不同的运算类实现。整体而言,工厂方法是对简单工厂的完善。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值