java设计模式之策略模式

时间:2021-08-31 21:58:16

策略模式概述:该设计模式是实现一个接口,各个子类去实现这个接口,在各个子类中可以实现各自的算法,然后在客户端持有这个接口的引用,可以随时去调用这个接口任何的一个实现算法

优点:充分体现了高内聚,低耦合及扩展性(OCP)原则


代码:

public interface Method {
<span style="white-space:pre"></span>//定义一个算法接口,用于子类实现
public int out();
}

实现这个接口,定义各自的算法;

第一个实现类,定义一个加法:

public class AddMethod implements Method{
private int i;
private int j;
public AddMethod(int i ,int j){
this.i = i;
this.j = j;
}
//实现方法二,定义一个加法
@Override
public int out() {
// TODO Auto-generated method stub
int num = i+j;
return num;
}



}


第二个实现类,定义一个减法:

public class SubMethod implements Method {
private int i;
private int j;
public SubMethod(int i ,int j){
this.i = i;
this.j = j;
}
//实现方法二,定义一个减法
@Override
public int out() {
// TODO Auto-generated method stub
int num = i-j;
return num;
}





}

第三个实现了,定义一个乘法:

public class InvoMethod implements Method {
private int i;
private int j;


public InvoMethod() {


this.i = i;
this.j = j;
}


/ 实现方法三,定义一个乘法法
public int out() {
// TODO Auto-generated method stub
int num = i * j;
return num;
}


}

定义一个实现类Context

package com.example.celue;

public class Context {
private Method method;

public Context(Method method){
this.method = method;
}
public void out(){
this.method.out();
}

}

在客户端使用:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//加法
Context contextAdd = new Context(new AddMethod(8,9));
contextAdd.out();
//减法
Context contextSub = new Context(new SubMethod(8,9));
contextSub.out();
// 乘法
Context contextInvo = new Context(new InvoMethod(8,9));
contextInvo.out();

//可以实现更多算法
}



}




github地址为:https://github.com/zhouwei5200/policy