1. 程式人生 > >java面向物件---介面和抽象的簡單練習

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();
}

結果:
買車票!
小王坐火車

回家過年!

買車票!
小李坐飛機
回家過年!