其他分享
首页 > 其他分享> > 2.策略模式

2.策略模式

作者:互联网

package strategPattern;


/**
 * 一般实现方式(简单工厂模式)
 *@author LiMing  E-mail:1151143484@qq.com
 *@date 2017年6月11日  上午9:05:39
 */
public class Commonly {
	public static void main(String[] args) {
		//创建方法是通过对象工厂创建  不用使用者知道应该new 那个方法 但是简单工厂模式不符合 开放封闭原则 它对于更改不是封闭的 需要修改工厂类
		Method method = Factory.createMethod("4");
		method.oprator();
		method = Factory.createMethod("5");
		method.oprator();
		method = Factory.createMethod("6");
		method.oprator();
	}
}

// 抽象方法类
abstract class Method {
	public abstract void oprator();
}

// 方法4实体类
class Method4 extends Method {
	public void oprator() {
		System.out.println("method4");
	}
}

// 方法5实体类
class Method5 extends Method {
	public void oprator() {
		System.out.println("method5");
	}
}

// 方法6实体类
class Method6 extends Method {
	public void oprator() {
		System.out.println("method6");
	}
}

// 工厂类
class Factory {
	public static Method createMethod(String type) {
		Method method = null;
		switch (type) {
		case "4":
			method = new Method4();
			break;
		case "5":
			method = new Method5();
			break;
		case "6":
			method = new Method6();
			break;
		default:
			break;
		}
		return method;
	}
}


 

 

package strategPattern;

/**
 * 策略模式实现方式 说白了 策略模式就是把简单工厂模式中的那些类需要调用的方法再工厂中的一个方法中调用一下 就是工厂不进提供创建对象的功能
 * 还提供帮助你调用对象方法的功能 具体看代码实现
 *
 * @author LiMing E-mail:1151143484@qq.com
 * @date 2017年6月11日 上午9:05:52
 */
public class StrategPattern {
	public static void main(String[] args) {
		//这里 调用方这只需要认识Context这个类就行 而简单工厂模式需要认识2个类 : Method + Factory 类
		Context context = null;
		context= new Context("7");
		context.oprator();
		context= new Context("8");
		context.oprator();
		context= new Context("9");
		context.oprator();
	}
}

// 抽象方法类
abstract class MethodA {
	public abstract void oprator();
}

// 方法4实体类
class Method7 extends MethodA {
	public void oprator() {
		System.out.println("method7");
	}
}

// 方法5实体类
class Method8 extends MethodA {
	public void oprator() {
		System.out.println("method8");
	}
}

// 方法6实体类
class Method9 extends MethodA {
	public void oprator() {
		System.out.println("method9");
	}
}

// 策略模式+工厂模式
class Context {
	Method method = null;
	public Context(String type) {
		switch (type) {
		case "7":
			method = new Method4();
			break;
		case "8":
			method = new Method5();
			break;
		case "9":
			method = new Method6();
			break;
		default:
			break;
		}
	}
	// 工厂类帮助具体对象调用指定的方法
	public void oprator() {
		method.oprator();
	}
}

 

策略模式就是把之前父类调用方法换成了在工厂类中调用  工厂类不仅仅提供类的创建 多了一个调用方法的功能  

所以名字也不叫工厂类了 叫context 

 

标签:策略,oprator,模式,class,method,void,new,public
来源: https://blog.51cto.com/u_12198094/2699987