读书笔记-《Effective Java》第20、21条:函数对象策略、类层次

本文探讨了在软件设计中使用策略模式与单例模式相结合的优势,通过具体示例展示了如何利用这两种模式来提高代码的灵活性和可维护性。策略模式通过定义一系列算法,并将每个算法封装起来,使它们可以互相替换,从而让算法独立于使用它的客户。单例模式确保一个类只有一个实例,并提供一个全局访问点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第20条:类层次优于标签类

第21条:用函数对象表示策略

大概是更容易维护吧

例:

1. 策略接口

public interface People {

    void call(String who);

}

2. 实现接口的方式,实现类没有域,就像工具类, 没必要允许创建多个实例,所以用单例。

//活动play之打麻将
public enum Son1 implements People {

    INSTANCE;

    public void call(String who) {
        System.out.println(who + ": 打麻将");
    }
}

3. 把策略通过参数的方式传到要调用的方法中。其实就是执行一下参数对象的方法而已。

//活动类
public class Son3 {
    //活动study
    public void study(String who) {
    }

    //活动play
    public void play(String who, People p) {
        p.call(who);
    }
}

4. 测试。 给方法传策略的实例,或者用匿名类的方式。

注:匿名类的方式不如单例, 执行多次会创建多个没必要创建的策略实例。

    @Test
    public void Test2() {

        Son3 s3 = new Son3();
        s3.play("张三",Son1.INSTANCE);
        s3.play("李四", new People() {
            public void call(String who) {
                System.out.println(who+": 搓泥");
            }
        });

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值