系列文章目录
第六章 行为模式(上)
目录
前言
设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
一、🌍策略(Strategy)模式是什么?🌍
该模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。
二、🌍策略(Strategy)模式的优缺点🌍
优点:
1)多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句;
2)策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码;
3)策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的策略;
4)策略模式提供了对“开闭原则”的完美支持,可以在不修改原代码的情况下,灵活增加新算法;
5)策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。
缺点:
1)客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类;
2)策略模式造成很多的策略类。
三、🌍策略(Strategy)模式的结构🌍
策略模式的主要角色有:
1)抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
2)具体策略(ConcreteStrategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
3)环境(Context)类:持有一个策略类的引用,最终给客户端调用。
四、🌍实例演示🌍
1.🌕实例概述🌕
抽象策略类:TripMode 类,交通工具选择方式
具体策略类:Bytrian(坐火车),Bycar(坐汽车),Selfdrive(做自驾车),ByTransportation(扩展开放) 类,这里读者可以定义可实现的具体类。
环境类:WyTour类,依赖于TripMode类,调用TripMode类的getout函数查看选择的交通工具是什么?
2.🌕代码演示🌕
package strategy;
public class strategy {
public static void main(String[] args) {
// TODO Auto-generated method stub
TripMode tp = new Selfdrive();
WyTour mytour = new WyTour(tp);
mytour.Get_getout();
}
}
//不同交通工具都应有的方法
interface TripMode
{
void getout(); //
}
//坐火车
class Bytrian implements TripMode
{
@Override
public void getout() {
// TODO Auto-generated method stub
System.out.println("已选择交通工具,坐火车。");
}
}
//坐汽车
class Bycar implements TripMode
{
@Override
public void getout() {
// TODO Auto-generated method stub
System.out.println("已选择交通工具,坐汽车。");
}
}
//坐自驾车
class Selfdrive implements TripMode
{
@Override
public void getout() {
// TODO Auto-generated method stub
System.out.println("已选择交通工具,坐自驾车。");
}
}
//扩展开放
class ByTransportation implements TripMode
{
@Override
public void getout() {
// TODO Auto-generated method stub
System.out.println("已选择交通工具,----。");
}
}
//环境类
class WyTour
{
private TripMode _stragety;
public WyTour(TripMode stragety)
{
_stragety = stragety;
}
public void Get_getout()
{
_stragety.getout();
}
}
3.🌕实验结果🌕
已选择交通工具,坐自驾车。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了行为模式下策略模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,策略模式的优点。