優(yōu)秀文章
說明
- 多態(tài)的前提必須滿足繼承和重寫;
重寫
普通手機(jī)類:
public class Phone{
private String displayer; // 顯示器
private String battery; // 電池
// 手機(jī)充電
public void charge(){
battery = "100%";
System.out.println("當(dāng)前電量:"+battery);
}
}
壞手機(jī)類:
// 繼承手機(jī)類并重寫手機(jī)的充電方法
public class BadPhone extends Phone {
// 壞手機(jī)充電
public void charge(){
System.out.println("充電失敗!");
}
}
現(xiàn)在不同的手機(jī)對于同一個充電操作已經(jīng)有了不同的體現(xiàn),已經(jīng)滿足多態(tài)的前提;
實例
充電器類:
public class Charger {
// 接收所有手機(jī)類,并對傳入手機(jī)執(zhí)行充電操作
public void charge(Phone phone){
phone.charge();
}
}
使用充電器給不同手機(jī)充電:
public static void main(String[] args) {
Charger charger = new Charger();
charger.charge(new Phone()); //給普通手機(jī)充電
charger.charge(new BadPhone()); // 給壞手機(jī)充電
}
執(zhí)行結(jié)果:
當(dāng)前電量:100%
充電失?。?/p>
拓展
如何使壞手機(jī)恢復(fù)正常充電功能?
策略模式
在之前的設(shè)計中,手機(jī)的充電是否正常在編碼階段就已經(jīng)決定,既然要動態(tài)的修改方法內(nèi)部的實現(xiàn),那么類的本身就不能具備固定的充電實現(xiàn):
首先抽象充電方法:
public interface ICharge {
// 抽象充電方法
public void charge();
}
正常充電:
public class NormalCharge implements ICharge {
@Override
public void charge() {
System.out.println("充電成功!");
}
}
異常充電:
public class AbnormalCharge implements ICharge {
@Override
public void charge() {
System.out.println("充電失??!");
}
}
修改普通手機(jī)類:
public class Phone{
private String displayer; // 顯示器
private String battery; // 電池
private ICharge charge; // 定義充電屬性
// 調(diào)用充電屬性所帶來的充電方法
public void charge(){
charge.charge();
}
public ICharge getCharge() {
return charge;
}
public void setCharge(ICharge charge) {
this.charge = charge;
}
}
使用充電器給不同手機(jī)充電:
public static void main(String[] args) {
Charger charger = new Charger();
// 實例化手機(jī)
Phone phone = new Phone();
// 設(shè)置正常充電操作
phone.setCharge(new NormalCharge());
// 實例化手機(jī)
Phone badPhone = new Phone();
// 設(shè)置異常充電操作
badPhone.setCharge(new AbnormalCharge());
charger.charge(phone); //給正常手機(jī)充電
charger.charge(badPhone); // 給壞手機(jī)充電
}
執(zhí)行結(jié)果:
充電成功!
充電失??!