Java经典设计模式之策略模式原理与用法详解

2025-05-29 0 107

本文实例讲述了Java经典设计模式策略模式。分享给大家供大家参考,具体如下:

策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

策略模式一般由下面三部分组成:

1. 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
2. 具体策略角色:包装了相关的算法和行为。
3. 环境角色:持有某一个策略类的引用,客户端调用。

策略模式设计原则:

1. 把程序中需要变化的部分抽离出来,独立于不变的部分
2. 面向接口编程,而不是面向实现编程,多作组合 ,少用继承。(组合 :在类中增加一个私有域,引用另外一个已经有的类的实例,通过调用实例的方法从而获得新的功能)

应用举例,以银行为例,可能有点不恰当

比如我们应用要接入银行支付功能。我们都知道,银行都有支付功能,随着技术的发展,银行具有了开通网络支付的功能。现在我们遇到的问题是,我们要增加支付的银行,但是有的银行还没有开通网络银行,有的已经开通了,而且也要把原有接入 的银行添加上网络银行功能(如果已经开通的话)。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70
//银行基类,为了适应变化,增加了网络支付处理的策略处理接口BankStrategy

public abstract class Bank {

private BankStrategy mBankStrategy;

public void setmStrategy(BankStrategy mStrategy) {

this.mBankStrategy = mStrategy;

}

public void payMoney() {

System.out.println("我具有支付功能");// 所有银行共同的特征

}

public abstract void serviceStyle();// 但每个银行有不同的服务方法(比的就是服务),具体的子类实现

public void netBank(){//开通网上银行

mBankStrategy.netPay();

}

}

//———-银行策略接口———————————

public interface BankStrategy {

void netPay();// 添加网络支付功能

}

//————–增加开通网络支付的策略实现类————

public class CanNetBank implements BankStrategy {

@Override

public void netPay() {

System.out.println("我已经开通网络支付功能");

}

}

//————–也有不开通网络支付的银行—————

public class NoNetBank implements BankStrategy {

@Override

public void netPay() {

System.out.println("我不开通网络银行,咋的!");

}

}

//——-地球银行:现在开通网络支付——————

public class EarthBank extends Bank {

public EarthBank(){

super();

super.setmStrategy(new CanNetBank());//这里就实现了网络支付

}

@Override

public void serviceStyle() {

System.out.println("我的服务在事个地球上是最好的!");

}

}

//——–太阳银行,说离我们太远了,不开通网络银行——————-

public class SunBank extends Bank {

public SunBank(){

super();

super.setmStrategy(new NoNetBank());//这里就不开通了(当然可不调用 ,只是告诉下实现方法)

}

@Override

public void serviceStyle() {

System.out.println("我的服务像金子一样发光!");

}

}

//———测试类———————————–

public class Test {

public static void main(String[] args) {

System.out.println("———测试———–");

Bank duck=null;

duck=new EarthBank();

duck.serviceStyle();

duck.payMoney();

duck.netBank();

System.out.println("———测试———–");

duck=new SunBank();

duck.serviceStyle();

duck.payMoney();

duck.netBank();

}

}

结果打印

Java经典设计模式之策略模式原理与用法详解

策略模式的优点:

1、 提供了管理相关的算法策略类,恰当使用继承可以把公共的代码转移到父类里面,避免重复的代码,使得架构也更加灵活。
2、 提供了可以替换继承关系的办法(组合)。继承也可以处理多种算法或行为,但算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。这样一来算法或行为的使用者就和算法或行为本身混在一起。使得动态改变算法变得复杂甚至不可行,也不符合开闭原则。
3、 相对于继承代码更好地得到复用,同时可以避免使用多重条件转移语句。

策略模式的缺点:

1、客户代码需要了解个策略实现的细节,只适用于客户端知道所有的算法或行为的情况。
2、 策略模式造成很多的策略类,每个具体策略类都会产生一个新类,增加了对象的数目。

希望本文所述对大家java程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java经典设计模式之策略模式原理与用法详解 https://www.kuaiidc.com/115353.html

相关文章

发表评论
暂无评论