(2)商场促销——策略模式

对于简单工厂模式的补充:面向对象的编程,并不是类越多越好,类的划分是为了封装,但是分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类(摘抄)。举个简单的例子,用baidu和google去搜csdn,这时就没有必要去创建两个类,只需要创建一个类,穿一个页面的地址进去就行,因为操作的方法是一样的,都是搜索csdn,只是网址的差别。

策略模式

它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响使用算法的客户(摘抄)。

我感觉策略模式就是纯封装算法的模式,把要实现同一个目的,但是达到目的的方式不同。

还是用昨天的计算的例子来举例算了,这样可以比较简单的看出来两种模式的对比。

工厂模式是把加减乘除当成不同的概念,策略模式是把加减乘除当作不同的方法,它们都属于计算这个概念。

//策略模式就要先生成一个策略类(抽象类)

public abstract class Operation
{
	public abstract double oper(int a,int b);
}

public class Add extends Operation
{
	@Override
	public double oper(int a,int b)
	{
		//加法方法
	}
}
......

//省略号后面分别实现减,乘,除

算法类都写完之后,这时就要写一个使用的类了

public class domethod
{
	Operation op = null;
	
	public select(String type)
	{
		switch (type) {
		case "+":
			op = new Add();
			break;
        ......
		}
		
	}//与简单工厂模式结合
	
	public double result (double a,double b)
	{
		return op.oper(a,b);
	}
}

在计算器调用操作类时

Domethod method = new Domethod();
method.select("+");
method.result(1,2);

这样使用策略模式和简单工厂模式的结合就只需要实例化一个类就可以了,而单纯的简单工厂模式需要实例化父类和工厂类
这个样子,代码的藕合度又降低了

总结

策略模式结合简单工厂模式使用,可以使藕合度比单纯的使用简单工厂模式低!
策略模式的用处在于需要在不同的时候使用不同业务规则!(摘抄)

个人理解策略于简单工厂模式的区别,简单工厂模式分离的是对象,而策略模式分离的是规则(所以父类中没有属性),用同一个例子使用两种模式,也代表了两种不一样的面向对象的理解,抽象的层次不一样。

文章导航