java面向物件---介面和抽象的簡單練習
阿新 • • 發佈:2019-02-11
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();
}
結果:
買車票!
小王坐火車
回家過年!
買車票!
小李坐飛機
回家過年!