java面向对象---接口和抽象的简单练习

1、有一批电脑,电脑有三种品牌,每个品牌都是组装机,都会用到显卡\内存\cpu,这些显卡\内存\cpu又有不同品牌的厂家生产,请组装出惠普、联想、苹果这三台电脑
简单实现(设计思路)

/**
 * 电脑抽象类
 */
abstract  class AComputer {
    IMemery memery;
    IGraphicsCard graphicsCard;
    ICpu cpu;

    abstract void setComponent(IMemery memery,IGraphicsCard graphicsCard,ICpu cpu);
    void comRun() { //模块方法
        memery.run();
        graphicsCard.run();
        cpu.run();
    }
}

class Hp extends AComputer{ //惠普电脑
    @Override
    void setComponent(IMemery memery, IGraphicsCard graphicsCard, ICpu cpu) {
        this.cpu = cpu;
        this.graphicsCard = graphicsCard;
        this.memery = memery;
    }
}
class Apple extends AComputer{ //苹果电脑
    @Override
    void setComponent(IMemery memery, IGraphicsCard graphicsCard, ICpu cpu) {
        this.cpu = cpu;
        this.graphicsCard = graphicsCard;
        this.memery = memery;
    }
}
class Lenovo extends AComputer{ //联想电脑
    @Override
    void setComponent(IMemery memery, IGraphicsCard graphicsCard, ICpu cpu) {
        this.cpu = cpu;
        this.graphicsCard = graphicsCard;
        this.memery = memery;
    }
}

定义的接口

public interface ICpu { //cpu接口
    void run();
}
public interface IGraphicsCard { //显卡接口
    void run();
}
public interface IMemery {//内存接口
    void run();
}

内存接口实现类

public class KingMemImp implements IMemery {
    @Override
    public void run() {
        System.out.println("金士顿内存");
    }
}
class WGMMemImp implements IMemery {
    @Override
    public void run() {
        System.out.println("WGM内存");
    }
}

cpu接口实现类

public class InterCpuImp  implements ICpu {

    @Override
    public void run() {
        System.out.println("InterCPU");
    }
}
 class AMDCpuImp  implements ICpu {

    @Override
    public void run() {
        System.out.println("AMDCPU");
    }
}
 class AppleCpuImp  implements ICpu {

    @Override
    public void run() {
        System.out.println("苹果CPU");
    }
}

显卡接口实现类

public class GFGrahImp implements IGraphicsCard {
    @Override
    public void run() {
        System.out.println("GF显卡");
    }
}
class AMDGrahImp implements IGraphicsCard {
    @Override
    public void run() {
        System.out.println("AMD显卡");
    }
}

客户端

    public static void main(String[] args) {
        //实现cpu接口的厂家
        ICpu aCpu = new AppleCpuImp();
        ICpu iCpu = new InterCpuImp();
        ICpu amCpu = new AMDCpuImp();
        //实现内存接口的实现类的厂商
        IMemery kIMemery = new KingMemImp();
        IMemery wgMemery = new WGMMemImp();
        //实现显卡接口的实现类厂商
        IGraphicsCard gfGra = new GFGrahImp();
        IGraphicsCard amdGra = new AMDGrahImp();

        //组装电脑
        AComputer hp = new Hp();
        hp.setComponent(kIMemery, gfGra, iCpu);
        hp.comRun();

        System.out.println("--------");
        AComputer apple = new Apple();
        apple.setComponent(wgMemery, amdGra, aCpu);
        apple.comRun();
    }

结果:
金士顿内存
GF显卡

InterCPU

WGM内存
AMD显卡
苹果CPU

2、春节回家,小明、小王、小李。三个步骤:①买票②使用交通工具③回家过年①与③两个步骤相同,已经实现了,②工具不同,分别是小明坐大巴,小王坐火车,小李坐飞机,请设计出他们的关系。并打印出每个人回家的三步骤。

/**
 * 人作为抽象
 *
 */
public abstract class Person {
    void goHome() { //实现回家方法
        System.out.println("回家过年!");
    }
    void buyTicket() { //实现买车票
        System.out.println("买车票!");
    }
    abstract void byTools(); //交通工具抽象方法
    void moduleMethod() {//模块方法设计模式,对要调用的方法封装,避免客户端调用复杂
        buyTicket();
        byTools();
        goHome();
    }
}
public class XiaoLi extends Person {
    @Override
    void byTools() {
        System.out.println("小李坐飞机");
    }
}
public class XiaoMing extends Person {
    @Override
    void byTools() {
        System.out.println("小王坐火车");
    }
}
public class XiaoWang extends Person {
    @Override
    void byTools() {
        System.out.println("小明坐大巴");
    }
}
public static void main(String[] args) {
    Person xm = new XiaoMing();
    xm.moduleMethod();
    System.out.println("----------");
    Person xl = new XiaoLi();
    xl.moduleMethod();
}

结果:
买车票!
小王坐火车

回家过年!

买车票!
小李坐飞机
回家过年!

猜你喜欢

转载自blog.csdn.net/m0_37822234/article/details/81220341
今日推荐