策略模式(1)

策略模式定义:分别封装行为接口,实现算法族,超类里放行为接口的对象,在子类里具体设定行为对象。原则就是,分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化独立于算法的使用者。


 策略模式注意点:

  1. 分析项目中的变化部分与不变部分

  2. 多用组合少用继承;用行为类组合,而不是行为的继承。更有弹性


案例1:

在三国杀里面,我们每个玩家都是一个独立的对象。有时候我们会抽到一些武器卡,每个对象只能持有一个武器。对于这种情况我们及时没有策略模式的概念,也会很自然的想到以下方案

1
2
3
4
5
public  interface  weapon {
 
     public  void  attack(Player victim);
 
}



1
2
3
4
5
6
7
8
9
10
11
//武器:流星锤
public  class  MeteorHammer  implements  weapon {
 
     private  final  byte  power =  2 ;
     private  final  byte  distance =  3 ;
 
     @Override
     public  void  attack(Player victim) {
         victim.beAttacked(power);
     }
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  class  Player {
 
     private  weapon weapon;
 
     //生命值
     private  byte  hitpoints;
     //每个玩家的位置,等于在房间类中,玩家在ArrayList<Player>中的Index
     private  byte  position;
 
     public  void  attackPlayer(Player victim){
         /*
          * 1.首先检查距离是否可以攻击
          * 2.距离允许,则攻击 weapon.attack()
          */
     }
 
     public  void  beAttacked( byte  power){
         this .hitpoints -= power;
     }
 
}



案例2:在HttpClient中,HttpClient提供了很多种浏览器策略,但是用户具体实例化浏览器对象时,浏览器采取何种策略,由用户自己选择。这种也是采用策略模式的思想,提取变化部分,抽象成接口,在实现其各种子类,再动态称为浏览器对象的字段

1
2
3
4
LaxRedirectStrategy laxRedirectStrategy =  new  LaxRedirectStrategy();
         CloseableHttpClient httpClient = HttpClients.custom()
                 .setRedirectStrategy(laxRedirectStrategy)
                 .build();




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值