美文网首页设计模式
java 状态模式 获取中国古代年龄称谓

java 状态模式 获取中国古代年龄称谓

作者: 饱饱想要的灵感 | 来源:发表于2022-08-01 20:48 被阅读0次

利用状态模式可以跳出无限 if-else 语句块的陷阱, 避免代码臃肿.

以获取中国古代年龄称谓为例, 正常书写if-else会有十几个判断条件, 代码难读又丑陋. 而使用状态模式, 则转变为十几个类, 每个类都只做一次判断, 且面向接口编程, 显得更优雅.

实现方法

  1. 定义一个接口
public interface ChineseAge {
    String compute(User user);
}
  1. 每一个分支条件都要实现该接口, 补充具体逻辑, 以下是第一个分支
public class ChiziAge implements ChineseAge {
    @Override
    public String compute(User user) {
        // if 写当前判断, else转入下一个判断, 使用关键字return
        if (user.getAge() >= 0 && user.getAge() < 3) {
            return "赤子";
        } else {
            return new ChuitiaoAge().compute(user);
        }
    }
}
  1. 调用者初始化时, 直接进入第一个分支条件
public class ChineseAgeExecutor {
    private final ChineseAge chineseAge;

    public ChineseAgeExecutor() {
        chineseAge = new ChiziAge();
    }

    public String getChineseAge(User user){
        return chineseAge.compute(user);
    }
}
  1. 附上其他年龄段的代码
public class ChuitiaoAge implements ChineseAge {
    @Override
    public String compute(User user) {
        if (user.getAge() >= 3 && user.getAge() < 8) {
            return "垂髫";
        } else {
            return new ZongjiaoAge().compute(user);
        }
    }
}

public class ZongjiaoAge implements ChineseAge {
    @Override
    public String compute(User user) {
        if (user.getAge() >= 8 && user.getAge() < 13) {
            return "总角";
        } else {
            return new DoukouAge().compute(user);
        }
    }
}

public class DoukouAge implements ChineseAge {
    @Override
    public String compute(User user) {
        if (user.getAge() >= 13 && user.getAge() < 15) {
            if (user.getSex().equals("女")) {
                return "豆蔻";
            } else {
                return "总角";
            }
        } else {
            return new ShufaAge().compute(user);
        }
    }
}

public class ShufaAge implements ChineseAge {
    @Override
    public String compute(User user) {
        if (user.getAge() >= 15 && user.getAge() < 20) {
            if (user.getSex().equals("女")) {
                return "及䈂";
            } else {
                return "束发";
            }
        } else {
            return new RuoguanAge().compute(user);
        }
    }
}

public class RuoguanAge implements ChineseAge{
    @Override
    public String compute(User user) {
        if (user.getAge() >= 20 && user.getAge() < 30) {
            if (user.getSex().equals("女")) {
                return "双十";
            } else {
                return "弱冠";
            }
        } else {
            return new ErliAge().compute(user);
        }
    }
}

相关文章

  • 中国古代年龄称谓~

    1、总角 八九岁至十三四岁的少年,古代儿童将头发分作左右两半,在头顶各扎成一个结,形如两个羊角,故称"总角"。 在...

  • 金钗、花信、耄耋...古人对年龄的文雅称谓

    时至今日,人们对年龄的称谓已经渐渐模糊成了具体的数字。然而,中国古代对年龄的称谓生动形象,从刚出生的婴儿到百岁老人...

  • 年龄称谓

    古代年龄称谓 襁褓:不满周岁。[1] 孩提:两至三岁。 始龀、髫年:女孩七岁,男孩八岁。说明:根据生理状况,男孩八...

  • 年龄称谓

    0岁 度:小儿初生之时。 孩提:指初知发笑尚在襁褓中的幼儿。 赤子、襁褓:未满周岁的婴儿。 汤饼之期:指婴儿出生三...

  • 年龄称谓

    关于称谓,首先从大的框架。 襁褓:不满周岁。 孩提:2~3岁的儿童,指带幼儿时期。 垂髫:三四岁至7岁(女),8岁...

  • 古代年龄称谓

    1.年龄称谓 年龄称谓是古代指代年龄的称呼,古人年龄有时候不用数字表示,而是用其他称谓来表示。年龄称谓大多是记载在...

  • java的线程,实现线程状态

    在Java中,要获取线程的当前状态,请使用Thread.getState()方法获取线程的当前状态。Java提供了...

  • 古代年龄称谓

    襁褓——不满周岁 黄口——本指雏鸟,后比喻幼儿,10岁以下。 总角、孩提——幼年泛称。 垂髫(tiáo)、始龀(c...

  • 古代年龄称谓

    不满周岁——襁褓; 2~3岁——孩提; 女孩7岁——髫年; 男孩8岁——龆年; 幼年泛称——总角; 10岁以下——...

  • 各个年龄称谓

    对年龄有一定的敏感度,却不知如何形容所要说的年龄段。去网上了解了一番,以下是各年龄段称谓: 襁褓:不满周岁。 孩提...

网友评论

    本文标题:java 状态模式 获取中国古代年龄称谓

    本文链接:https://www.haomeiwen.com/subject/xwsmmrtx.html