java设计模式-策略模式

本文探讨了Java设计模式中的策略模式,通过实例解释了如何使用策略模式实现不同策略,以及它与Java多态性的关系。文章指出,虽然策略模式提供了灵活性,但可能会导致策略类的数量增多。

和大家分享一下自己的理解,有什么不对的地方,请指出

package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Car
 * @Description: TODO
 * @date 2019/4/24  11:47
 */
public class Car {
    /**
     * @Description:车辆启动
     * @return: void
     * @auther: luoshuaiqian
     * @date: 2019/4/24 11:48
     */
    public void start() {
        System.out.println("car start");
    }
}
package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Sedan
 * @Description: 轿车
 * @date 2019/4/24  11:50
 */
public class Sedan extends Car {
    //重写父类方法
    public void start() {
        System.out.println("sedan start");
    }
}
package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Trucks
 * @Description: 货车
 * @date 2019/4/24  11:54
 */
public class Trucks extends Car {
    //重写父类方法
    public void start() {
        System.out.println("trucks start");
    }
}
package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Test
 * @Description: TODO
 * @date 2019/4/24  11:55
 */
public class Test {
    public static void main(String[] args) {
        testCar(new Sedan());
        testCar(new Trucks());
    }

    public static void testCar(Car car) {
        car.start();
    }
}

Sedan Trucks我们可以看做策略类,根据传入的不同策略,出现不同的结果。

但是再这样有很大的局限性,我们想使用testCar方法,就必须继承Car类,java只支持单继承,对于一些已经继承过的类就无法满足了。

我们可以把Car更换为接口

package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Car
 * @Description: TODO
 * @date 2019/4/24  11:47
 */
public interface Car {
    /**
     * @Description:车辆启动
     * @return: void
     * @auther: luoshuaiqian
     * @date: 2019/4/24 11:48
     */
    void start();
}
package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Sedan
 * @Description: 轿车
 * @date 2019/4/24  11:50
 */
public class Sedan implements Car {

    public void start() {
        System.out.println("sedan start");
    }
}
package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Trucks
 * @Description: 货车
 * @date 2019/4/24  11:54
 */
public class Trucks implements Car {

    public void start() {
        System.out.println("trucks start");
    }
}
package com.shejimoshi.celuomoshi;

/**
 * @author luoshuaiqian
 * @Title: Test
 * @Description: TODO
 * @date 2019/4/24  11:55
 */
public class Test {
    public static void main(String[] args) {
        testCar(new Sedan());
        testCar(new Trucks());
    }

    public static void testCar(Car car) {
        car.start();
    }
}

这样我们就可以通过实现Car接口,来调用testCar方法。我感觉策略模式和多态差不多,第一种方法就是java多态的体现。策略模式用起来还是挺方便的,缺点就是会有很多策略类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值