轉發有關面向抽象編程和面向接口編程一篇文章https://www.cnblogs.com/chiweiming/p/9229457.html
以下是面向接口編程的一個例子
某游戲公司現欲開發一款面向兒童的模擬游戲,該游戲主要模擬現實世界中各種鴨子的發聲特征、飛行特征和外觀特征。游戲需要模擬的鴨子種類及其特征如下表所示。
鴨子種類及其特征
| 鴨子種類 |
發聲特征 |
飛行特征 |
外觀特征 |
| 灰鴨( MallardDuck) |
發出“嘎嘎”聲(Quack) |
翅膀飛行(FlyWithWings) |
灰色羽毛 |
| 紅頭鴨(RedHeadDuck) |
發出“嘎嘎”聲(Quack) |
翅膀飛行(FlyWithWings) |
灰色制毛-紅頭 |
| 棉花鴨(CottonDuck) |
不發聲(QuackNoWay) |
不能飛行( FlyNoWay) |
白色 |
| 橡皮鴨(RubherDuck) |
發出橡皮與空氣摩擦聲(Squeak) |
不能飛行( FlyNoWay |
黑白橡皮色 |
為了支持將來能夠模擬更多種類鴨子的特征,決定采用策略(Strategy)模式。試畫出對應的設計模式的類圖結構圖。並寫java文件、編譯java文件、執行class文件。
以下是類圖:

以下是接口代碼:
public interface DUCK { public abstract void voice(); public abstract void fly(); public abstract void show(); }
以下是實現接口的類代碼:
public class MallardDuck implements DUCK{ public void voice() { System.out.print("發出“嘎嘎”聲(Quack)"); } public void fly() { System.out.print("翅膀飛行(FlyWithWings)"); } public void show() { System.out.println("灰色羽毛"); } }
public class RedHeadDuck implements DUCK { public void voice() { System.out.print("發出“嘎嘎”聲(Quack)"); } public void fly() { System.out.print("翅膀飛行(FlyWithWings)"); } public void show() { System.out.println("灰色制毛-紅頭"); } }
public class CottonDuck implements DUCK { public void voice() { System.out.print("不發聲(QuackNoWay)"); } public void fly() { System.out.print("不能飛行( FlyNoWay)"); } public void show() { System.out.println("白色"); } }
public class RubherDuck implements DUCK { public void voice() { System.out.print("發出橡皮與空氣摩擦聲(Squeak)"); } public void fly() { System.out.print("不能飛行( FlyNoWay)"); } public void show() { System.out.println("黑白橡皮色"); } }
以下是simulator(模擬器(面向接口的類))代碼:
public class simulator {//真正實現接口回調的模擬器 DUCK duck; public void setDUCK(DUCK duck) { this.duck=duck; } public void play() { duck.voice(); duck.fly(); duck.show(); } }
Application代碼(只用了MallardDuck的例子):
public class Application { public static void main(String args[]) {//主函數的調用 simulator sim=new simulator(); sim.setDUCK(new MallardDuck()); sim.play(); } }
以下是運行結果截圖:

歡迎大家指正!
