策略模式(Strategy Pattern)为同一个行为定义了不同的策略,并为每种策略都实现了不同的方法。在用户使用的时候,系统根据不同的策略自动切换不同的方法来实现策略的改变。同一个策略下的不同方法是对同一功能的不同实现,因此在使用时可以相互替换而不影响用户的使用。
package cn.jaa.strategy_pattern;
/**
* @Author: Jaa
* @Description: 出行方式策略类
* @Date 2023/12/3 9:56
*/
public interface TravelStrategy {
public void travelMode();
}
2)TravelStrategy的两种实现方式TravelByAirStrategy和TravelByCarStrategy:
package cn.jaa.strategy_pattern;
import lombok.extern.slf4j.Slf4j;
/**
* @Author: Jaa
* @Description:
* @Date 2023/12/3 9:57
*/
@Slf4j
public class TravelByAirStrategy implements TravelStrategy {
@Override
public void travelMode() {
log.info("travel by airport ...");
}
}
package cn.jaa.strategy_pattern;
import lombok.extern.slf4j.Slf4j;
/**
* @Author: Jaa
* @Description:
* @Date 2023/12/3 9:58
*/
@Slf4j
public class TravelByCarStrategy implements TravelStrategy {
@Override
public void travelMode() {
log.info("travel by car ...");
}
}
package cn.jaa.strategy_pattern;
/**
* @Author: Jaa
* @Description: Context实现策略模式
* @Date 2023/12/3 10:00
*/
public class Context {
private TravelStrategy travelStrategy;
public TravelStrategy getTravelStrategy() {
return travelStrategy;
}
public void setTravelStrategy(TravelStrategy travelStrategy) {
this.travelStrategy = travelStrategy;
}
public void travelMode() {
this.travelStrategy.travelMode();
}
}
package cn.jaa.strategy_pattern;
import lombok.extern.slf4j.Slf4j;
/**
* @Author: Jaa
* @Description:
* @Date 2023/12/3 10:02
*/
@Slf4j
public class StrategyDemoTest {
public static void main(String[] args) {
Context context = new Context();
TravelByAirStrategy airStrategy = new TravelByAirStrategy();
context.setTravelStrategy(airStrategy);
context.travelMode();
log.info("change air to airport ... ...");
TravelByCarStrategy carStrategy = new TravelByCarStrategy();
context.setTravelStrategy(carStrategy);
context.travelMode();
}
}
原文地址:https://blog.csdn.net/qq_38304915/article/details/134761508
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_42300.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。