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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式之一

發布時間:2023/12/20 asp.net 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

設計模式設計出來就是為了讓后期維護代碼更容易,增加代碼的強壯性等好處!

策略模式

? 自己的理解:定義一個算法族,分別分裝起來,使他們能互相替換且算法的變換與使用算法的對象相互獨立。簡單來說是將變化的和不變得分離,對接口編程,不對實現編程(少用繼承)。

?

下面舉個例子:

Joe上班的公司做了一套相當成功的模擬鴨子游戲:SirmDuck。游戲中出現各種鴨子,一遍游泳,一遍呱呱叫。此系統的內部設計使用了標準的OO技術。設計了一個鴨子的超類(SuperDuck)并讓各種鴨子繼承此類。一天公司要求在水里游泳的鴨子要會飛。Joe毫不猶豫的將SuperDuck中添加了fly()方法。第二天Joe被叫進辦公司問道,游戲中的橡皮鴨子在屏幕中飛來飛去。(《Head First 設計模式》里的翻版)

問題:只要繼承了這個超類,都會飛。。而且后期如果加入別的不會叫的鴨子,也要動原始代碼?

解決::利用策略模式。面向接口編程,將變的抽離出來。

以下是自己寫的代碼:

?

/**
* Created by Administrator on 2018/1/12.
* 將鴨子的飛的行為分離出來 先寫這個行為,具體的怎么飛按照各鴨子的重寫
*/
public interface FlyBehavior {
void fly();
}


/**
* Created by Administrator on 2018/1/12.
* 將鴨子的叫的行為分離出來
*/
public interface MaleBehavior {
void male();
}



public class NoFly implements FlyBehavior {
@Override
public void fly() {
//不會飛
System.out.println("我不會飛!");
}

}




public class CanFly implements FlyBehavior {
@Override
public void fly() {
//能飛
System.out.println("我會飛!");
}
}



public class CanMale implements MaleBehavior {
@Override
public void male() {
System.out.println("我會叫,叫起來 吱吱吱");
}
}



public class CanMale1 implements MaleBehavior {
@Override
public void male() {
System.out.println("我會叫 叫起來像 呱呱呱");
}
}



/**
* Created by Administrator on 2018/1/12.
* 鴨子的超類,每一個鴨子都要繼承這個Duck
*/
public class Duck {
//鴨子有兩個行為 飛和叫
FlyBehavior flyBehavior;
MaleBehavior maleBehavior;

public Duck(){
}
public void flyBehavior(){
flyBehavior.fly();
}
public void maleBehavior(){
maleBehavior.male();
}

public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}

public void setMaleBehavior(MaleBehavior maleBehavior) {
this.maleBehavior = maleBehavior;
}
}



public class ModulDuck extends Duck {
//可以在構造函數里去new 對應的行為。。然后在建鴨子的時候 new對應的鴨子即可
public ModulDuck(){
flyBehavior=new NoFly();
// maleBehavior=new
}
public void display(){
System.out.println("我是一只模型鴨子!");
}
}

//測試類 public class DuckTest {
public static void main(String[] args){
Duck duck=new Duck();
duck.setFlyBehavior(new CanFly());
duck.setMaleBehavior(new CanMale1());
duck.flyBehavior();
duck.maleBehavior();

Duck duck1=new Duck();
duck1.setMaleBehavior(new CanMale());
duck1.setFlyBehavior(new NoFly());
duck1.flyBehavior();
duck1.maleBehavior();
}
}

?

?

轉載于:https://www.cnblogs.com/xiaohuachen/p/8277299.html

總結

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

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