zoukankan      html  css  js  c++  java
  • 设计模式之策略模式

    策略模式(Strategy) 是常用的一种设计模式,顾名思义,可以简单的理解为可以灵活的选择一种谋略(算法)达到某种目的。策略模式共有四个角色,分别为:Context上下文角色、抽象策略角色、具体策略角色、Client客户端,下文将详细介绍他们之家的关系

    角色关系

    代码实现

    interface car {
        public int useTime();
    }
    
    class Bicycle implements car {
        String str = "运动,慢";
    
        public int useTime(start_site, end_site) {
            System.out.println(str);
            return 40;
        }
    }
    
    class Electrocar implements car {
        String str = "悠闲,快";
    
        public int useTime(start_site, end_site {
            System.out.println(str);
            return 25;
        }
    }
    
    class Automobile implements car {
        String str = "舒适,堵车";
    
        public int useTime(start_site, end_site) {
            System.out.println(str);
            return 30;
        }
    }
    
    class Context {
        private Car car;
    
        public void Context(Car car) {
            this.car = car;
        }
        public int getUseTime() {
            return car.useTime;
        }
    }
    
    class Client {
        public static void main(String[] args) {
            String start_site = "始发站";
            String end_site = "终点站";
    
            Context context = new Context(new Bicycle());
            return context.getUseTime(start_site, end_site);
        }
    }
    
    

    优缺点

    优点

    • 策略模式符合开闭原则
    • 避免使用条件判断语句
    • 使用策略模式,可以减少暴露类的其他功能,安全性好

    缺点

    • 客户端需要知道所有类,并实现该类(一般配合工厂模式使用)
    • 会增加很多策略类

    对比其他设计模式

    学过工厂模式的应该会有一个疑问,为什么不用工厂模式,用策略模式还要再使用工厂模式,以下我们对比一下和策略模式相似的模式的共同点和不同点

    对比简单工厂模式

    相同点

    • 结构很相似

    不同点

    • 传入参数不同,简单工厂模式,传递的更倾向于类型(不知道返回的是什么类),策略模式传递的是已知的实例
    • 返回值不同,简单工厂模式返回的是实例,策略模式返回的是指定的方法
    • 工厂是创建型模式,它的作用就是创建对象。策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为

    对比静态代理模式

    相同点

    • 结构很相似,包括传递的参数类型
      不同点
    • 静态代理模式知道结果,比如找中介买房子,知道会买什么样的房子,及会买到房子。策略是计算结果,不知道内部如何处理
    • 静态代理模式,代理类和被代理类继承一个接口,实现同样的方法,策略类不同

    个人能力有限,有不足的地方欢迎大家补充

  • 相关阅读:
    抽象类abstract
    final关键字特点
    继承ExtendsFour
    继承(继承中构造方法的关系)
    继承ExtendsTwo-super&this
    继承ExtendsOne
    静态
    构造方法与setXxx方法
    15.8
    15.7
  • 原文地址:https://www.cnblogs.com/it-abel/p/14469608.html
Copyright © 2011-2022 走看看