以下内容轉載請注明來自"菩提樹下的楊過(http://blog.sqlsky.com)"
把書中開篇duck問題的代碼翻譯成了c#版:
概述:
某遊戲公司要設計一款鴨子的遊戲,裡面有各種各樣的鴨子,有些會飛,有些會叫,但都會遊泳。而且不同種類的鴨子,飛行方式和叫喚的方式各不相同
以下代碼展現了二個oo原則:
1.找出應用中可能需要變化之外,把它們獨立出來,不要和那些不需要變化的代碼混在一起
2.針對接口程式設計,而不是針對實作程式設計
Duck抽象類:
(Head First 設計模式)學習筆記(1) using System;
(Head First 設計模式)學習筆記(1) using System.Collections.Generic;
(Head First 設計模式)學習筆記(1) using System.Linq;
(Head First 設計模式)學習筆記(1) using System.Text;
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) namespace duck
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) {
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /**//// <summary>
(Head First 設計模式)學習筆記(1) /// 鴨子的抽象類
(Head First 設計模式)學習筆記(1) /// </summary>
(Head First 設計模式)學習筆記(1) public abstract class Duck
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) //注:以下二個變量,當然可以做成屬性,但是從oo的角度考慮,這二個是代表duck的具體行為的,還是用執行個體變量比較恰當
(Head First 設計模式)學習筆記(1) protected FlyBehavior flyBehavior = null;
(Head First 設計模式)學習筆記(1) protected QuackBehavior quackBehavior = null;
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /**//// <summary>
(Head First 設計模式)學習筆記(1) /// 開始叫喚
(Head First 設計模式)學習筆記(1) /// </summary>
(Head First 設計模式)學習筆記(1) public void StartQuack()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) quackBehavior.Quack();
(Head First 設計模式)學習筆記(1) }
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 開始飛行
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public void StartFly()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) flyBehavior.Fly();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 遊泳(所有的鴨子都會swim)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public void Swim()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("All the ducks can swim.");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 抽象方法(傳回具體鴨子的描述)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public abstract void Display();
(Head First 設計模式)學習筆記(1) }
(Head First 設計模式)學習筆記(1) }
飛行行為接口:
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 飛行行為接口
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public interface FlyBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// Fly方法,必須由實作該接口的類實作
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) void Fly();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) 叫喚行為接口:
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// "叫"行為接口
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public interface QuackBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) void Quack();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) 幾種不同飛行方式類:
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// "用翅膀飛"類(普通鴨子的飛行行為)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class FlyWithWings:FlyBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public void Fly()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("I can fly with wing.");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// "不會飛"類(橡皮鴨,模型鴨的飛行行為)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class FlyNoWay:FlyBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("Don't be fool! I can't fly.");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) 幾種不同方式的叫喚類:
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// "呱呱叫"類(普通鴨子的quack行為)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class NormalQuack:QuackBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public void Quack()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("ga ga ga
(Head First 設計模式)學習筆記(1) ");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// "吱吱叫"類(橡皮鴨子的quack行為)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class Squeak:QuackBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("zhi zhi zhi
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// "不會叫"類(模型鴨專用)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class Mute:QuackBehavior
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("I can't make sound");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) 幾種不同類型的鴨子類
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 紅頭鴨,會用翅膀飛,會呱呱叫
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class RedHeadDuck:Duck
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public RedHeadDuck()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) this.flyBehavior = new FlyWithWings();
(Head First 設計模式)學習筆記(1) this.quackBehavior = new NormalQuack();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public override void Display()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("I am a real red-head-duck.");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 模型鴨子,不會飛,不會叫
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public class ModelDuck:Duck
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) public ModelDuck()
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) this.flyBehavior = new FlyNoWay();
(Head First 設計模式)學習筆記(1) this.quackBehavior = new Mute();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine("I am a mute duck.I cannot fly and quack.");
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// 允許模型鴨在運作時動态改變飛行行為(這裡本人修改了下,原文中把這個方法放到了Duck抽象類中,即允許所有鴨子都可以動态修改飛行方式,但有可能出現橡皮鴨改變為能用翅膀飛的尴尬,呵呵)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) /// <param name="fb"></param>
(Head First 設計模式)學習筆記(1) public void SetFlyBehavior(FlyBehavior fb)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) this.flyBehavior = fb;
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) 最終測試:
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) class Program
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) static void Main(string[] args)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) RedHeadDuck _redDuck = new RedHeadDuck();
(Head First 設計模式)學習筆記(1) _redDuck.Display();//I am a real red-head-duck.
(Head First 設計模式)學習筆記(1) _redDuck.StartFly();//I can fly with wing.
(Head First 設計模式)學習筆記(1) _redDuck.StartQuack();//ga ga ga
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.WriteLine();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) ModelDuck _modelDuck = new ModelDuck();
(Head First 設計模式)學習筆記(1) _modelDuck.Display();//I am a mute duck.I cannot fly and quack.
(Head First 設計模式)學習筆記(1) _modelDuck.StartFly();//Don't be fool! I can't fly.
(Head First 設計模式)學習筆記(1) _modelDuck.StartQuack();//I can't make sound
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) _modelDuck.SetFlyBehavior(new FlyWithWings());//動态改變模型鴨子的飛行行為特性
(Head First 設計模式)學習筆記(1) _modelDuck.StartFly();//I can fly with wing.
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) Console.ReadLine();
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1)
(Head First 設計模式)學習筆記(1) 菩提樹下的楊過 2008-05-08 22:37:24 整理于上海