首页 > 其他 > 详细

设计模式-策略模式

时间:2021-06-16 14:47:33      阅读:30      评论:0      收藏:0      [点我收藏+]

1.什么是策略模式

策略模式(Strategy Pattern)也叫做政策模式(Policy Pattern)这种类型的设计模式属于行为型模式
定义一组 算法,将每个算法都封装起来,并且使它们之间可以互换。

自己的理解 做事情 不同情况的处理

引入<<设计模式之禅>>中的例子  刘备江东娶妻 赵云使用诸葛亮三条锦囊妙计

例子1

技术分享图片
public class StrategyPattern {

    static class ZhaoYun {
        //赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计
        public static void main(String[] args) {
            Context context;
            System.out.println("---拆第一个---");
            context = new Context(new BackDoor());
            context.operate();

            System.out.println("---拆第二个了---");
            context = new Context(new GivenGreenLight());
            context.operate();

            System.out.println("---拆第三个---");
            context = new Context(new BlockEnemy());
            context.operate();
        }
    }

    /**
     * 妙计  策略接口
     */
    interface IStrategy {
        public void operate();
    }

    /**
     * 找乔国老走后门  具体策略类  策略接口子类
     */
     static class BackDoor implements IStrategy {
        @Override
        public void operate() {
            System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
        }
    }

    /**
     * 求吴国太开绿灯 具体策略类  策略接口子类
     */
    static class GivenGreenLight implements IStrategy {
        @Override
        public void operate() {
            System.out.println("求吴国太开绿灯,放行!");
        }
    }

    /**
     * 孙夫人断后 具体策略类  策略接口子类
     */
    static class BlockEnemy implements IStrategy {
        @Override
        public void operate() {
            System.out.println("孙夫人断后,挡住追兵");
        }
    }

    /**
     * 锦囊  环境类  策略执行入口
     */
    static class Context {
        private IStrategy straegy;

        public Context(IStrategy strategy) {
            this.straegy = strategy;
        }

        public void operate() {
            this.straegy.operate();
        }
    }
}
View Code

结果如下

技术分享图片

 

做事情会有很多情况  不同情况会有不同的处理

比如说想要去旅行  那么旅行要选择那种交通方式呢  飞机 高铁 火车 自家 都行

例子2

技术分享图片
public class StrategyPattern2 {
    
    public static void main(String[] args) {
    //模拟客户端调用 选择不同策略 使用不同的旅行方式
    GoTravel airplane = new GoTravel(new Airplane());
    System.out.println("旅行方式" + airplane.tool());

    GoTravel car = new GoTravel(new Car());
    System.out.println("旅行方式" + car.tool());

    GoTravel highTrain = new GoTravel(new HignTrain());
    System.out.println("旅行方式" + highTrain.tool());
}


    /**
     *  策略接口  想去旅行
     */
    interface Travel {
        public String tool();
    }

    /***
     *   环境类    具体执行策略入口
     */
    static class GoTravel {

        private Travel travel;

        public GoTravel(Travel travel) {
            this.travel = travel;
        }

        public String tool() {
            return travel.tool();
        }
    }

    /***
     *   具体策略类   策略接口子类
     */
    static class Car implements Travel {
        @Override
        public String tool() {
            return "开车";
        }
    }

    /***
     *   具体策略类   策略接口子类
     */
    static class HignTrain implements Travel {
        @Override
        public String tool() {
            return "坐高铁";
        }
    }

    /***
     *   具体策略类   策略接口子类
     */
    static class Airplane implements Travel {
        @Override
        public String tool() {
            return "坐飞机";
        }
    }
}
View Code

 

 

2.为什么要用策略模式

3.怎么使用策略模式

 

设计模式-策略模式

原文:https://www.cnblogs.com/wf-zhang/p/14888752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!