A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lucy198921 中级黑马   /  2013-3-28 21:24  /  1498 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lucy198921 于 2013-3-29 20:26 编辑

以下是自己练习的题目,代码都正常.

但是我想做个延伸,就是有以下改变,

苹果手机唯独只有写入数据的功能

,其他打印机和网卡都具有读取数据和写入数据的功能.



________________________________________________

/*
  主板的实例
    1. 描述主板
          开机,使用USB设备
        2. 描述USB接口
          定义2个功能,规则
          读取数据,写入数据

        3. 打印机,打印机接入USB接口上
           打印机实现USB接口
*/

interface  USB
{
        public abstract void read();
        public abstract void write();
}

class Printer implements USB
       {
public   void read()
        {
System.out.println("读取打印机数据");
        }
public   void write()
        {
System.out.println("写入打印机数据");
        }
       }


class NetCard implements USB
       {
public   void read()
        {
System.out.println("读取打网卡数据");
        }
public   void write()
        {
System.out.println("写入网卡数据");
      }
      }

class Iphone implements USB
     {
public   void read()
        {
System.out.println("读取苹果5数据");
        }
public   void write()
        {
System.out.println("写入苹果5数据");
}
}


class MainBoard
{
        public void openPower()
        {
        System.out.println("系统正常启动中");
        }
        public void useUSB(USB u)
                {
        if (null==u)
        {
                System.out.println("无外接设备接入");
        return;
        }
                u.read();
                u.write();
        }
}



class Computer
{

        public static void main(String[] args)
        {
        MainBoard mb= new MainBoard();
        mb.openPower();
        mb.useUSB(null);
        mb.useUSB(new Printer());
                mb.useUSB(new NetCard());
                        mb.useUSB(new Iphone());

        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

倒序浏览
新手有错误请不要笑我。我觉得这个好像类似于那个Adapter,代码如下:
package com.j2se.text;

interface USB {
        public abstract void read();

        public abstract void write();
}

class USB2 implements USB {
        public void read() {}
       
        public void write(){}
}

class Printer implements USB {
        public void read() {
                System.out.println("读取打印机数据");
        }

        public void write() {
                System.out.println("写入打印机数据");
        }
}

class NetCard implements USB {
        public void read() {
                System.out.println("读取打网卡数据");
        }

        public void write() {
                System.out.println("写入网卡数据");
        }
}

class Iphone extends USB2 {
        public void write() {
                System.out.println("写入苹果5数据");
        }
}

class MainBoard {
        public void openPower() {
                System.out.println("系统正常启动中");
        }

        public void useUSB(USB u) {
                if (null == u) {
                        System.out.println("无外接设备接入");
                        return;
                }
                u.read();
                u.write();
        }
}

class Computer {

        public static void main(String[] args) {
                MainBoard mb = new MainBoard();
                mb.openPower();
                mb.useUSB(null);
                mb.useUSB(new Printer());
                mb.useUSB(new NetCard());
                mb.useUSB(new Iphone());

        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新手加油

查看全部评分

回复 使用道具 举报
自己的理解,可能不对,还望版主给点意见:
程序中的接口和现实生活中的接口不是完全一样的,现实中的usb口可读、写数据、充电,具有三个功能,但是是通过插入其中的设备的驱动程序来完成对设备的读取数据或者充电的,也就是说usb接口是“知道”是什么设备能具有什么功能的(准确来说是操作系统知道),我的u盘有u盘的驱动,摄像头有摄像头的驱动,操作系统使用不同的设备的不同驱动才用一个usb完成了多个功能。苹果设备的只写功能,可以通过其驱动程序“告知”操作系统来完成。
但是我们的程序中并没有什么驱动程序,也就是说我们的实现类没有办法去让接口知道它是一个什么样的类,所以我们程序中的接口不应该像显示中的usb那样多功能聚合,而应该一个接口只定义一个功能。
而且我们知道java程序中的接口是有规定的,其实现类必须实现其规定的所有功能,除非其实现类是抽象类。但是java中的接口我们可以多实现而不是像继承那样只能单继承,这样我们就能通过实现多接口而实现一个类的多功能了。
所以,我认为的解决方法就是写两个接口,一个读一个写,让除了苹果之外的设备实现两个接口,而苹果只实现写就行了。
希望能让你明白,也希望版主能用心看下,给个评价,到底对不对。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
记得及时处理帖子咯~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马