interface Animal{
public void say();
}
class Mammal implements Animal{
public void say(){
System.out.println("哺乳动物");
}
}
class Reptiles implements Animal{
public void say(){
System.out.println("爬行动物");
}
}
class Whale implements Animal{
private Animal animal;
public Whale(Animal animal){
this.animal = animal;
}
public void say(){
System.out.println("鲸喷水");
animal.say();
}
}
class Dog implements Animal{
private Animal animal;
public Dog(Animal animal){
this.animal = animal;
}
public void say(){
System.out.println("狗汪汪叫");
animal.say();
}
}
class Lizards implements Animal{
private Animal animal;
public Lizards(Animal animal){
this.animal = animal;
}
public void say(){
System.out.println("蜥蜴四角爬行");
animal.say();
}
}
class Snake implements Animal{
private Animal animal;
public Snake(Animal animal){
this.animal = animal;
}
public void say(){
System.out.println("蛇有毒");
}
}
class Gecko implements Animal{
private Animal lizards;
public Gecko(Animal lizards){
this.lizards = lizards;
}
public void say(){
System.out.println("壁虎是蜥蜴的一种,它比较小");
lizards.say();
}
}
class MonitorLizard implements Animal{
private Animal animal;
public MonitorLizard(Animal animal){
this.animal = animal;
}
public void say(){
System.out.println("巨蜥是蜥蜴的一种,它比较大");
animal.say();
}
}
class Test{
public static void main(String args []){
int flag = 4;
if(flag == 1){
Mammal mammal = new Mammal();
Whale whale = new Whale(mammal);
whale.say();
}
else if(flag == 2){
Reptiles reptiles = new Reptiles();
Lizards lizards = new Lizards(reptiles);
lizards.say();
}
else if(flag == 3){
Reptiles reptiles1 = new Reptiles();
Lizards lizards1 = new Lizards(reptiles1);
Gecko gecko1 = new Gecko(lizards1);
gecko1.say();
}
else if(flag == 4){
Reptiles reptiles2 = new Reptiles();
Lizards lizards2 = new Lizards(reptiles2);
MonitorLizard ml = new MonitorLizard(lizards2);
ml.say();
}
}
}
菜鸟饼 能不能用java的工厂模式处理下面的问题。 求代码 和 注释
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 修改下你的Test类,提取成一个工厂类,面向抽象编程的原则,根据传入的type类型返回具体的某个实现类。
参考代码如下:class AnimalFactory { public static Animal factory(int type) { Animal instance = null; switch (type) { case 1: Mammal mammal = new Mammal(); instance = new Whale(mammal); break; case 2: Reptiles reptiles = new Reptiles(); instance = new Lizards(reptiles); break; case 3: Reptiles reptiles1 = new Reptiles(); Lizards lizards1 = new Lizards(reptiles1); instance = new Gecko(lizards1); break; case 4: Reptiles reptiles2 = new Reptiles(); Lizards lizards2 = new Lizards(reptiles2); instance = new MonitorLizard(lizards2); break; default: System.out.println("not support this type."); } return instance; } public static void main(String[] args) { int flag = 4; Animal animal = AnimalFactory.factory(flag); if (animal != null) { animal.say(); } else { System.out.println("this type is not supported."); } } }
测试结果跟你的main方法一样,就是将你的main方法中new子类的过程作为工厂方法提出来,根据传入的类型来创建子类,最终返回的类型是抽象类。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器