以下内容转载请注明来自"菩提树下的杨过(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 整理于上海