Java设计模式大题练习6

       歌手(Singer)有经纪人(Agent)来代理他的演出业务。一位经纪人也只代理一位歌手的业务。歌手有姓名属性(Name)和唱歌方法(Sing),经纪人也有姓名属性和唱歌方法,找经纪人去唱歌其实是通过他找他所代理的歌手去唱歌。请模拟场景:李辉是歌手华晨宇的经纪人,我们要通过李辉找华晨宇来唱歌。请选择合适的设计模式进行设计,可以较为详细地描述设计思路后画出类图,也可以简单描述设计思路后直接写出代码。(提示:main方法中要创建华晨宇这个歌手对象和李辉这个经纪人对象,然后打印一句:我是经纪人李辉,我安排歌手华晨宇唱歌。)

正确答案:

 经过分析,可采用代理模式进行设计。

        定义一个Isinger接口,在该接口中声明sing(唱歌)方法,Isinger充当抽象主题角色。定义一个Singer(歌手)类实现Isinger接口,充当真实主题角色,Singer类中有Name(字符串类型)属性。定义一个Agent(经纪人)类实现Isinger接口,充当代理主题角色,Agent类有Name(字符串类型)属性,和一个singer(Singer类型)属性指向他所代理的歌手。Agent类的构造方法带一个字符串类型参数和一个Singer类型参数,用于设置经纪人姓名和所代理的歌手。Singer的构造方法带一个字符串类型参数用于设置歌手姓名。Singer的Sing方法就打印一句:“歌手xxx唱歌。“(其中xxx是歌手的Name属性)。Agent类的Sing方法是先打印一句(该句无须换行):"我是经纪人xxx(其中xxx是经纪人的Name属性),我安排",然后调用其代理的歌手的Sing方法。

      可以在场景类的main方法中定义两个Isinger引用singer1和singer2,以华晨宇为参数创建一个歌手对象并用singer1指向它,然后再以李辉和singer1为参数创建一个经纪人对象并用singer2指向它,最后调用singer2的Sing方法。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个实现示例: ``` public enum ChineseSinger { SINGER1("邓紫棋"), SINGER2("周杰伦"), SINGER3("蔡依林"), SINGER4("王菲"), SINGER5("李宇春"), SINGER6("陈奕迅"), SINGER7("林俊杰"), SINGER8("张学友"), SINGER9("张靓颖"), SINGER10("毛阿敏"), SINGER11("孙楠"), SINGER12("李健"), SINGER13("田馥甄"), SINGER14("庾澄庆"), SINGER15("罗大佑"), SINGER16("王力宏"), SINGER17("陈小春"), SINGER18("梁静茹"), SINGER19("刘德华"), SINGER20("张国荣"), SINGER21("杨宗纬"), SINGER22("容祖儿"), SINGER23("许嵩"), SINGER24("林宥嘉"), SINGER25("薛之谦"), SINGER26("那英"), SINGER27("周传雄"), SINGER28("范晓萱"), SINGER29("张信哲"), SINGER30("陈慧琳"); private String name; private ChineseSinger(String name) { this.name = name; } public String getName() { return name; } public static ChineseSinger getSingerByIndex(int index) { if (index < 1 || index > 30) { throw new IllegalArgumentException("Invalid index: " + index); } return ChineseSinger.values()[index - 1]; } @Override public String toString() { return name; } } ``` 在这个枚举类中,我们定义了30个歌手,每个歌手都有一个编号和一个名称。我们还定义了一个方法`getSingerByIndex`,它接受一个从1到30的整数作为参数,返回对应的歌手。这个方法内部通过调用`values()`方法获得枚举类中所有的枚举值,然后根据输入的索引返回对应的歌手。 使用示例: ``` ChineseSinger singer = ChineseSinger.getSingerByIndex(3); System.out.println(singer); // 输出:蔡依林 ``` 这个例子中,我们通过调用`getSingerByIndex`方法得到了第三个歌手,也就是蔡依林。然后我们输出了这个歌手的名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值