设计模式之策略模式

策略模式

什么是策略模式, 简单的说: 一个问题有不同的解法;而作为client用怎么样的方式去选择的问题。

定义问题的各种算法,把每一个算法封装起来, 并且使它们可相互转换。

下面看个列子:

坐火车、坐高铁、坐飞机

总之,最终的目的地都是一样的。也就是选择不同的方式产生的结果都是一样的。

来我们念念八股文: 这个策略模式所需要的角色:
1、环境类(Context):用来操作策略的上下文环境,也就是我们游客。
2、抽象策略类(Strategy):策略的抽象,出行方式的抽象
3、具体策略类(ConcreteStrategy):具体的策略实现,每一种出行方式的具体实现。

来, 废话不多说, 献上你的节操:

第一:定义解决问题的抽象:

public interface  Strategy{
	void travelMethod();
}

第二步:具体解决问题的方法


// 火车
class TrainStrategy implements Strategy {

    @Override
    public void travelMethod() {
        System.out.println("kuang dang!kuang dang!kuang dang!kuang dang!");
    }
}

// 飞机
class AircraftStrategy implements Strategy {

    @Override
    public void travelMethod() {
        System.out.println("jue !!!jue!!!");
    }
}

//  大炮
class ArtilleryStrategy implements Strategy {

    @Override
    public void travelMethod() {
        System.out.println("pong!pong!pong!pong!pong!");
    }
}

第三步:环境构建


class travelerContext {

    TrainStrategy trainStrategy;

    public travelerContext(TrainStrategy trainStrategy) {
        this.trainStrategy = trainStrategy;
    }

    public void travelMethod() {
        this.trainStrategy.travelMethod();
    }
}

public static void main(String[] args) {
        // 先构建问题的上下文
        travelerContext travelerContext = new travelerContext();

        // 根据不同的类型的乘客选用不用的交通方式
        // 穷屌丝:
        Strategy trainStrategy = new TrainStrategy();
        travelerContext.SetTravelerContext(trainStrategy);
        travelerContext.travelMethod();

        //小康生活的:
        Strategy aircraftStrategy = new AircraftStrategy();
        travelerContext.SetTravelerContext(aircraftStrategy);
        travelerContext.travelMethod();

        //有钱的: 当然是坐大炮了
        ArtilleryStrategy artilleryStrategy = new ArtilleryStrategy();

        travelerContext.SetTravelerContext(artilleryStrategy);
        travelerContext.travelMethod();

        // 你是哪一种呢、、、、

    }

按照设计模式的基本原则大致就是这样, 注意, 在实际工作中, 不要因为设计模式而生搬硬套,这样往往得不偿失。

那么策略模式在实际业务场景中帮我们解决了什么问题, 是个coder都会说:让code beautiful 起来; 哈哈!也许你觉得我不专业:好, 那就上个专业名词: 开闭原则。

实际工作案列:

一个爬虫项目: 要爬取不同的网站, 最终解决的问题是不是一样的(构建url、 抓取数据), 此时是不是可以用上了呀!

根据不同的网站特点构建不同的上下文,分发到不同的策略去执行。。。

当然: 我们还可以组合其它的设计模式组装code, 这样年轻、貌美、大长腿是不是出来了。。。

好了!今天分享到这里, 谢谢各位看客老爷们。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值