策略模式(Strategy Pattern)

2024/3/28 Java进阶

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。

# 1、策略模式案例

定义一系列打电话的方式,设置哪个方式,就用哪个方式打电话,可以随时替换方式。

public interface Phone {
    void call();
}
1
2
3

一系列算法

public class QqCall implements Phone{
    @Override
    public void call() {
        System.out.println("QQ打电话");
    }
}

public class WeixinCall implements Phone {
    @Override
    public void call() {
        System.out.println("微信打电话");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public class PhoneCall{

    private Phone phone;

    public void setPhoneType(Phone phone) {
        this.phone = phone;
    }

    public void callPhone() {
        if(phone==null){
            System.out.println("拨打方式不能为空");
            return;
        }
        phone.call();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ClientTest {

    public static void main(String[] args) {
        PhoneCall call = new PhoneCall();

        call.setPhoneType(new WeixinCall());
        call.callPhone();

        call.setPhoneType(new QqCall());
        call.callPhone();
    }
}
/**
 * 输出结果:
 * 微信打电话
 * QQ打电话
 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17