设计模式(java)-策略模式

点击链接加入群聊【java菜鸟学习】:https://jq.qq.com/?_wv=1027&k=5afU7nS
群号:124569404
设计模式(java)-策略模式

自己理解:通过实现接口,接口调用方法时具体的实现是子类完成的.

如下代码所示,当前apple有颜色和重量两个属性,如果某一个需求需要统计绿色的Apple有多少个,那么很简单,写一个根据color颜色去区分的方法即可,如果有来一个需求,要根据红色去区分,大不了又加一个方法…随着需求的增多,这种重复的方法也越来越多,且程序的健壮性不好,现在使用策略模式(感觉策略模式像匿名内部类实现的一个变种 ,就像 这种方式 , 一个方法的入参是接口,实际上传入的入参参数是接口的实现 ,这就是我理解的策略模式

new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        }).start();


new Thread(() -> System.out.println(Thread.currentThread().getName())).start();

)

import lombok.Builder;
import lombok.Data;
import lombok.ToString;

/**
 * ClassName: Apple
 * @Description:
 * @author leegoo
 * @date 2019年02月15日
 */
@Builder
@Data
@ToString
public class Apple {

    private  String color;
    private  Integer weight;


    public Apple(String color, Integer weight) {
        this.color = color;
        this.weight = weight;
    }
}


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * ClassName: Demo01
 *
 * @author leegoo
 * @Description:
 * @date 2019年02月15日
 */
public class Demo01 {
    private static List<Apple> list = Arrays.asList(
            Apple.builder().color("green").weight(160).build(),
            Apple.builder().color("green").weight(150).build(),
            Apple.builder().color("red").weight(160).build()
    );
	
    //可标记也可不标记
    @FunctionalInterface
    public interface FifterApple {
        boolean fifter(Apple apple);
    }

    static List<Apple> fifterApple(FifterApple fifterApple){
        List<Apple> apples = new ArrayList<>();
        list.forEach(e->{
            if (fifterApple.fifter(e))
                apples.add(e);
        });
        return apples;
    }


    public static void main(String[] args) {
        //以后做统计的话就只需要改这个地方就可以了
        List<Apple> apples = fifterApple(k -> k.getColor().equals("red"));
        System.out.println(apples);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>