日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(Head First 设计模式)学习笔记(1)

發布時間:2024/6/5 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Head First 设计模式)学习笔记(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


以下內容轉載請注明來自"菩提樹下的楊過(http://blog.sqlsky.com)"
?
把書中開篇duck問題的代碼翻譯成了c#版:

概述:
某游戲公司要設計一款鴨子的游戲,里面有各種各樣的鴨子,有些會飛,有些會叫,但都會游泳。而且不同種類的鴨子,飛行方式和叫喚的方式各不相同

以下代碼體現了二個oo原則:
1.找出應用中可能需要變化之外,把它們獨立出來,不要和那些不需要變化的代碼混在一起
2.針對接口編程,而不是針對實現編程


Duck抽象類:

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?鴨子的抽象類
????
///?</summary>

????public?abstract?class?Duck
????
{
????????
//注:以下二個變量,當然可以做成屬性,但是從oo的角度考慮,這二個是代表duck的具體行為的,還是用實例變量比較恰當
????????protected?FlyBehavior?flyBehavior?=?null;
????????
protected?QuackBehavior?quackBehavior?=?null;

????????
/**////?<summary>
????????
///?開始叫喚
????????
///?</summary>

????????public?void?StartQuack()?
????????
{
????????????quackBehavior.Quack();
????????}


????????
/**////?<summary>
????????
///?開始飛行 
????????
///?</summary>

????????public?void?StartFly()
????????
{
????????????flyBehavior.Fly();
????????}


????????
/**////?<summary>
????????
///?游泳(所有的鴨子都會swim)
????????
///?</summary>

????????public?void?Swim()?
????????
{
????????????Console.WriteLine(
"All?the?ducks?can?swim.");
????????}


????????
/**////?<summary>
????????
///?抽象方法(返回具體鴨子的描述)
????????
///?</summary>

????????public?abstract?void?Display();
????}

}

飛行行為接口:
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?飛行行為接口
????
///?</summary>
????public?interface?FlyBehavior
????
{
????????
/**////?<summary>
????????
///?Fly方法,必須由實現該接口的類實現
????????
///?</summary>

????????void?Fly();?
????????
????}

}

叫喚行為接口:
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?"叫"行為接口
????
///?</summary>

????public?interface?QuackBehavior
????
{
????????
void?Quack();
???????
????}

}

幾種不同飛行方式類:
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?"用翅膀飛"類(普通鴨子的飛行行為)
????
///?</summary>

????public?class?FlyWithWings:FlyBehavior
????
{
????????
public?void?Fly()?
????????
{
????????????Console.WriteLine(
"I?can?fly?with?wing.");
????????}

????}

}

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?"不會飛"類(橡皮鴨,模型鴨的飛行行為)
????
///?</summary>

????public?class?FlyNoWay:FlyBehavior
????
{
????????
public?void?Fly()?
????????
{
????????????Console.WriteLine(
"Don't?be?fool!?I?can't?fly.");
????????}

????}

}

幾種不同方式的叫喚類:
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?"呱呱叫"類(普通鴨子的quack行為)
????
///?</summary>
????public?class?NormalQuack:QuackBehavior
????
{
????????
public?void?Quack()?
????????
{
????????????Console.WriteLine(
"ga?ga?ga?");
????????}

????}

}

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?"吱吱叫"類(橡皮鴨子的quack行為)
????
///?</summary>
????public?class?Squeak:QuackBehavior
????
{
????????
public?void?Quack()?
????????
{
????????????Console.WriteLine(
"zhi?zhi?zhi?");
????????}

????}

}


using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?"不會叫"類(模型鴨專用)
????
///?</summary>

????public?class?Mute:QuackBehavior
????
{
????????
public?void?Quack()?
????????
{
????????????Console.WriteLine(
"I?can't?make?sound");
????????}

????}

}


幾種不同類型的鴨子類
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?紅頭鴨,會用翅膀飛,會呱呱叫
????
///?</summary>

????public?class?RedHeadDuck:Duck
????
{
????????
public?RedHeadDuck()?
????????
{
????????????
this.flyBehavior?=?new?FlyWithWings();
????????????
this.quackBehavior?=?new?NormalQuack();???????????
????????????
????????}


????????
public?override?void?Display()
????????
{
????????????Console.WriteLine(
"I?am?a?real?red-head-duck.");
????????}

????}

}


using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
/**////?<summary>
????
///?模型鴨子,不會飛,不會叫
????
///?</summary>

????public?class?ModelDuck:Duck
????
{
????????
public?ModelDuck()?
????????
{
????????????
this.flyBehavior?=?new?FlyNoWay();
????????????
this.quackBehavior?=?new?Mute();
????????}


????????
public?override?void?Display()
????????
{
????????????Console.WriteLine(
"I?am?a?mute?duck.I?cannot?fly?and?quack.");
????????}


????????
/**////?<summary>
????????
///?允許模型鴨在運行時動態改變飛行行為(這里本人修改了下,原文中把這個方法放到了Duck抽象類中,即允許所有鴨子都可以動態修改飛行方式,但有可能出現橡皮鴨改變為能用翅膀飛的尷尬,呵呵)
????????
///?</summary>
????????
///?<param?name="fb"></param>

????????public?void?SetFlyBehavior(FlyBehavior?fb)
????????
{
????????????
this.flyBehavior?=?fb;
????????}


????}

}


最終測試:
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?duck
{
????
class?Program
????
{
????????
static?void?Main(string[]?args)
????????
{
????????????RedHeadDuck?_redDuck?
=?new?RedHeadDuck();
????????????_redDuck.Display();
//I?am?a?real?red-head-duck.
????????????_redDuck.StartFly();//I?can?fly?with?wing.
????????????_redDuck.StartQuack();//ga?ga?ga?

????????????Console.WriteLine();

????????????ModelDuck?_modelDuck?
=?new?ModelDuck();
????????????_modelDuck.Display();
//I?am?a?mute?duck.I?cannot?fly?and?quack.
????????????_modelDuck.StartFly();//Don't?be?fool!?I?can't?fly.
????????????_modelDuck.StartQuack();//I?can't?make?sound


????????????Console.WriteLine();
????????????_modelDuck.SetFlyBehavior(
new?FlyWithWings());//動態改變模型鴨子的飛行行為特性
????????????_modelDuck.StartFly();//I?can?fly?with?wing.

????????????Console.ReadLine();

????????}

????}

}

菩提樹下的楊過 2008-05-08 22:37:24 整理于上海

轉載于:https://www.cnblogs.com/yjmyzz/archive/2008/05/08/1189044.html

總結

以上是生活随笔為你收集整理的(Head First 设计模式)学习笔记(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。