日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

浅谈设计模式01-策略模式

發布時間:2025/3/20 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈设计模式01-策略模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

一、?定義

最近開始研讀Head First設計模式,這本書給人的感覺耳目一新,不容易犯困啊。今天和大家分享一下策略模式。

1.?定義

策略模式定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立于使用該算法的客戶。

上圖為策略模式結構圖,其中:

  • Strategy可以聲明為接口或者抽象類,主要用來抽象不同的算法或行為;
  • ConcreteStrategyA等是上述接口或抽象類的具體實現,分別實現不同的算法或者行為;
  • Context中包含Strategy的實例,以及對該實例的操作。

2.?設計模式原則

  • 多用組合,少用繼承。
  • 找出應用中可能變化之處,把它們獨立出來,不要和那些不需要變化的代碼放在一起。

二、?實例

看到這個模式,讓我想起西游記里面神仙妖怪,每每大戰都會使用各自的神器,大顯神通。正因為這樣,才能成為流傳的經典。要是都千篇一律赤手空搏,恐怕也就沒什么好看的了。下面我們就以這個寫個簡單的小例子。

1.場景一:?簡單亮相

各路神仙首先要來個自我介紹,采用類似“我乃…”句式;然后亮出神器,“看我的…”。

實現:我們使用一個抽象類Role,包含Introduce()和Fight()方法。然后定義幾個具體的類來實現。

  • 抽象角色類

public abstract class Role

{

public abstract void Introduce();

public abstract void Fight();

}

  • 具體角色類

/// 孫悟空

public class SunWukong : Role

{

public override void Introduce()

{

Console.WriteLine("我乃齊天大圣孫悟空!");

}

public override void Fight()

{

Console.WriteLine("看我的如意金箍棒!");

}

}

/// 豬八戒

public class ZhuBajie : Role

{

public override void Introduce()

{

Console.WriteLine("我乃天蓬元帥豬八戒!");

}

public override void Fight()

{

Console.WriteLine("看我一耙!");

}

}

/// 鐵扇公主

public class TieshanGongzhu : Role

{

public override void Introduce()

{

Console.WriteLine("我乃鐵扇公主!");

}

public override void Fight()

{

Console.WriteLine("看我一扇,讓你飛到天邊!");

}

}

}

  • Program.cs調用

class Program

{

static void Main(string[] args)

{

Console.WriteLine("簡單亮相:");

SunWukong wukong = new SunWukong();

wukong.Introduce();

wukong.Fight();

ZhuBajie bajie = new ZhuBajie();

bajie.Introduce();

bajie.Fight();

TieshanGongzhu gongzhu = new TieshanGongzhu();

gongzhu.Introduce();

gongzhu.Fight();

Console.Read();

}

2.?場景二:悟空搶了鐵扇公主的武器

上面我們實現了不同神仙使用不同的武器進行打斗,但是有可能發生這種情況,比方孫悟空搶了鐵扇公子的扇子,或者某路妖怪大哥稍占上風搶走了悟空的金箍棒。這個時候用原來這種方式就不好實現了。所以我們將fight這個行為抽象為接口,使它與具體的主人分離獨立開來。

  • IFight接口中定義fight()方法,然后在各具體行為類中實現。

/// 抽象出來的戰斗接口

public interface IFight

{

void fight();

}

/// 金箍棒武器戰斗

public class JinGuBang?: IFight

{

public void fight()

{

Console.WriteLine("看我的如意金箍棒!");

}

}

//鐵扇武器戰斗

public class TieShan?: IFight

{

public void fight()

{

Console.WriteLine("看我一扇,讓你飛到天邊!");

}

}

?

? //空手戰斗
??? public class Kongshou : IFight
??? {
??????? public void fight()
??????? {
??????????? Console.WriteLine("完了!我沒有武器了。");
??????? }
??? }

?

  • 抽象角色類Role:其中包含IFight行為實例;改變武器的方法;以及調用fight()的方法。

public?abstract?class Role

{

public?IFight?fight;//IFight接口的實例

public abstract void Introduce();

public void?SetFight(IFight fight)//改變武器

{

this.fight = fight;

}

public void Fight()//調用fight()方法

{

fight.fight();

}

?//搶武器
??????? public void GetWeaponFrom(Role role)
??????? {
??????????? this.fight = role.fight;
??????????? role.fight = new Kongshou();
??????? }

}

  • 具體角色類。其中,在構造函數中初始化戰斗武器。

/// 孫悟空

public class SunWukong : Role

{

public SunWukong()

{//初始化武器

base.fight = new JinGuBang();

}

public override void Introduce()

{

Console.WriteLine("我乃齊天大圣孫悟空!");

}

}

/// 鐵扇公主

public class TieshanGongzhu : Role

{

public TieshanGongzhu()

{

base.fight = new TieShan();

}

public override void Introduce()

{

Console.WriteLine("我乃鐵扇公主!");

}

}

  • Program.cs類調用:

class Program

{

static void Main(string[] args)

{

Console.WriteLine("簡單亮相:");

SunWukong wukong = new SunWukong();

wukong.Introduce();

wukong.Fight();

TieshanGongzhu gongzhu = new TieshanGongzhu();

gongzhu.Introduce();

gongzhu.Fight();

Console.WriteLine("**悟空搶了公主的鐵扇**");

wukong.GetWeaponFrom(gongzhu);

gongzhu.Introduce();
gongzhu.Fight();
wukong.Introduce();
wukong.Fight();
Console.Read();}

}

OK.初學設計模式,想和大家交流一下。有什么描述的不合適的地方,還請提出來。

轉載于:https://my.oschina.net/networker/blog/14471

總結

以上是生活随笔為你收集整理的浅谈设计模式01-策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: eeuss一区二区| 亚洲精选中文字幕 | 国产91精品ai换脸 | 人妻精油按摩bd高清中文字幕 | 女生脱裤子让男生捅 | 国产喷水福利在线视频 | 亚洲欧美自拍视频 | hd极品free性xxx护士 | 国产精品大屁股白浆一区 | 精品国精品国产 | 男人猛进女人爽的大叫 | 日本乱大交xxxx公交车 | 成人综合av | 强辱丰满人妻hd中文字幕 | 第一福利丝瓜av导航 | 国产精品一二三四 | 视频国产在线 | 国产裸体舞一区二区三区 | 亚洲中文字幕97久久精品少妇 | 一级黄色免费片 | 韩日午夜在线资源一区二区 | 国产电影一区在线观看 | 欧美第一页在线 | 激情五月在线观看 | 狠狠插影院 | 操操操干干干 | 亚洲美女在线视频 | 精品日韩在线观看 | 久久黄网站 | 撸撸在线视频 | 免费看av毛片| 51嘿嘿嘿国产精品伦理 | 免费观看黄色一级视频 | 日韩在线高清 | 黄色a级免费 | free欧美性69护士呻吟 | 毛片1000部免费看 | 亚卅色图 | 日本免费高清一区二区 | 久久久久久久人妻无码中文字幕爆 | 欧美九九 | 99成人免费视频 | 麻豆免费观看网站 | 日产精品久久久久 | 梦梦电影免费高清在线观看 | 亚洲成人中文 | 狼干综合| 中文字幕理伦片免费看 | 日韩精品在线观看一区二区三区 | 成人在线一区二区三区 | 亚洲欧洲综合av | 免费av在线网站 | 羞羞答答av | 色婷婷综合久久 | 香蕉日日| 中文字幕在线播放一区 | 超碰网址 | 欧美影院一区二区 | 亚洲图片欧美日韩 | 久草免费看 | 不卡一区二区三区四区 | 四虎在线视频 | 国产精品性爱在线 | 狠狠人妻久久久久久综合 | 美女爱爱视频 | 大尺度舌吻呻吟声 | 日韩成人免费 | 国产激情久久久久 | 国产嘿咻| 在线观看岛国av | 久久无码视频网站 | 少妇激情偷人三级 | 18禁免费无码无遮挡不卡网站 | 成人国产在线 | 午夜裸体性播放 | 国产精品一区二区三区四区五区 | 成人xxxx | 亚洲视频在线免费 | 伊人88 | 国产免费黄色小视频 | 成人在线小视频 | 国产二区精品视频 | 亚洲视频一区二区三区 | 精品三级国产 | 日韩在线一级 | 欧美黑人做爰爽爽爽 | 精品国产乱码久久久久久闺蜜 | 亚洲好视频 | 日韩欧美黄色网址 | 相亲对象是问题学生动漫免费观看 | 鸥美一级片 | 99久久久无码国产精品性黑人 | 国产艳俗歌舞表演hd | 国产成年人视频 | 欧美久操 | 毛色毛片 | 精品黑人一区二区三区在线观看 | 好色av| 开心激情网站 |