Java实验四接口educoder

这篇博客介绍了如何在Java中定义和实现Animal接口,包括Dog、Centipede、People及其子类Chinese和Britisher。同时,定义了MyList接口并实现了两个不同的列表类:MyObjectArray和MyDoubleArray,它们使用数组来存储元素并提供了添加、获取、清空、检查空性和获取容量等操作。

接口练习

Animal.java

package step2;
//定义Animal接口
public interface Animal{
    public void Speak();
    public void Walk();
    public String toString();
}

Centipede.java

package step2;
//完成Centipede类
public class Centipede implements Animal{
    public void Speak(){
        System.out.println("不发声");
    }
    public void Walk(){
        System.out.println("不知道有多少条腿走路");
    }
    public String toString(){
        return "蜈蚣";
    }
}

Dog.java

``package step2;
//完成Dog类
class Dog implements Animal{
   public  void Speak(){
        System.out.println("发声");
    }
   public void Walk(){
       System.out.println("四条腿走路");
   }
  public  String toString (){
       return "狗";
   }
}

People.java

package step2;
//完成People类
class People implements Animal{
    public void Speak(){
        System.out.println("发声");
    }
   public  void Walk(){
        System.out.println("两条腿走路");
    }
   public  String toString(){
        return "人";
    }
}

Chinese.java

package step2;
//完成Chinese类
class Chinese extends People{
   public  String toString(){
        return "中国人";
    }
}

Britisher.java

package step2;
//完成Britisher类
class Britisher extends People{
    public String toString(){
        return "英国人";
    }
}

定义一个MyList接口,并使用数组的方法来实现接口

MyList

package step1;
//在此写接口MyList
public interface MyList{
       public void add(Object obj);
       public   Object get(int index);
       public void clear();
       public boolean isEmpty();
       public  int size();
       public int capacity();
}

MyObjectArray

package step1;
import java.util.Arrays;
//在此写MyObjectArray类
public class MyObjectArray implements MyList{
    private Object[] Array = null;
    private int c = 0;
    private int incSize;
    public  MyObjectArray(){

    }
   public  MyObjectArray(int incSize){
       if(incSize <0)
          this.incSize = 5;
        else
            this.incSize = incSize;
        this.Array = new Object[this.incSize];
    }
public void add(Object obj){
    if(this.c==Array.length)
        Array = Arrays.copyOf(Array,Array.length+incSize);
    Array[c]=obj;
    c++;
}
public Object get(int index){
    Object obj = null;
    if(index>0&&index<c)
        obj= Array[index];
    return obj;    
}
public boolean isEmpty(){
    if(Array[0]==null)
        return true;
    else    
        return false;
}
public int size(){
    return c;
}
public int capacity()
{
    return this.Array.length;
}
public void clear(){
    this.Array = new Object[5];
    this.c = 0;
}
}

MyDoubleArray

package step1;
import java.util.Arrays;
//在此写MyDoubleArray类
public class MyDoubleArray implements MyList{
    private Object[] Array = null;
    private int c = 0;
    private int incSize;
    public  MyDoubleArray(){

    }
   public  MyDoubleArray(int initSize){
       if(initSize <0)
          this.incSize = 10;
        else
            this.incSize = initSize;
        this.Array = new Object[this.incSize];
    }
public void add(Object obj){
    if(c==Array.length)
        Array = Arrays.copyOf(Array,2*Array.length);
    Array[c]=obj;
    this.c++;
}
public Object get(int index){
    Object obj = null;
    if(index>0&&index<c)
        obj= Array[index];
    return obj;    
}
public boolean isEmpty(){
    if(Array[0]==null)
        return true;
    else    
        return false;
}
public int size(){
    return c;
}
public int capacity()
{
    return this.Array.length;
}
public void clear(){
    this.Array = new Object[10];
    this.c = 0;
}
}

仅供自己的学习记录和参考

### 头歌平台 Java 工厂模式实验解析 头歌平台(EduCoder)上的 Java 设计模式实验通常围绕常见的 GoF 设计模式展开,其中工厂模式作为创建型模式中最基础的种,常被用于对象的实例化解耦。该实验般要求学生掌握简单工厂模式、工厂方法模式以及抽象工厂模式的核心结构实现方式。 #### 简单工厂模式实现要点 在简单工厂模式中,通过个静态工厂来决定具体实例化的子型。例如,在消息发送场景下定义 `Sender` 接口,其有两个实现:`MailSender` 和 `SmsSender`: ```java interface Sender { void send(); } class MailSender implements Sender { @Override public void send() { System.out.println("正在发送邮件..."); } } class SmsSender implements Sender { @Override public void send() { System.out.println("正在发送短信..."); } } ``` 对应的工厂提供静态方法根据输入参数返回不同的实现对象[^1]: ```java class SendFactory { public static Sender produce(String type) { if ("mail".equalsIgnoreCase(type)) { return new MailSender(); } else if ("sms".equalsIgnoreCase(type)) { return new SmsSender(); } else { throw new IllegalArgumentException("不支持的消息型: " + type); } } } ``` 此即典型简单工厂结构,适用于产品种较少且变动不频繁的情况。 #### 工厂方法模式升级版设计 当新增产品变得频繁时,应采用工厂方法模式,为每种产品定义对应的具体工厂。核心接口仍为 `Sender`,而增加抽象工厂接口: ```java interface Factory { Sender create(); } class MailFactory implements Factory { @Override public Sender create() { return new MailSender(); } } class SmsFactory implements Factory { @Override public Sender create() { return new SmsSender(); } } ``` 客户端调用时依赖于工厂接口而非具体,提升扩展性和可维护性[^7]。 #### 抽象工厂模式应用拓展 对于更复杂的产品族需求(如跨操作系统组件构建),需引入抽象工厂模式。此时可通过统入口生产多个关联产品的组合。参考引用中的 `FactoryManager__` 展示了基于字符串名称动态选择不同系统工厂的能力,体现了配置驱动的对象创建机制[^1]: ```java public class FactoryManager__ { public static Factory__ selectFactory(String name){ if (name.equals("windows")){ return new FactoryWindows(); } else if (name.equals("linux")){ return new FactoryLinux(); } else { System.out.println("error ......选择工厂错误"); return null; } } } ``` 此逻辑可用于模拟多环境适配器生成策略。 #### 常见问题排查建议 - **编译报错提示找不到或方法**:确认是否遗漏了接口声明或拼写错误;注意包路径导入致性。 - **运行时报 NullPointerException**:检查工厂返回值是否为空,尤其在条件判断未覆盖全部分支的情况下容易发生。 - **无法通过平台测试用例**:多数因输出语句内容不符所致,务必严格按照题目指定格式打印信息(如区分大小写、标点符号等)[^2]。 #### 完整测试验证流程 按照标准模板编写主函数进行功能校验: ```java public class FactoryTest { public static void main(String[] args) { // 使用简单工厂创建 mail 发送器 Sender sender = SendFactory.produce("mail"); sender.send(); // 或使用工厂方法模式 Factory factory = new MailFactory(); Sender sender2 = factory.create(); sender2.send(); } } ``` 确保程序能正常输出预期行为并满足自动化判题系统的匹配规则。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值