天天氣非常好,下著淅淅瀝瀝的小雨,刮著風(fēng),感覺甚好;我在北京向各位問好。這幾天公司基本沒什么事兒,從昨天開始就復(fù)習(xí)了一下多線程編程,今天給各位分享一種Java23種設(shè)計(jì)模式中最常見的設(shè)計(jì)模式--策略模式。為什么將策略模式和多線程綁在一起呢,不知道各位有沒有注意過我們在進(jìn)行多線程編程的時(shí)候,創(chuàng)建線程的方式有2種,一種是繼承Thread類,另外一種就是實(shí)現(xiàn)Runnable接口;當(dāng)然,我們會(huì)毫不保留的選擇第二種,因?yàn)閿U(kuò)展性強(qiáng),習(xí)慣接口開發(fā)等等原因,但是第二種方式還潛藏了23種Java設(shè)計(jì)模式中的其中一個(gè)模式,那就是低調(diào)而又強(qiáng)勢的"策略模式"。

       說說策略模式吧,這種模式的設(shè)計(jì)思想就是:為了考慮業(yè)務(wù)邏輯的千變?nèi)f化和復(fù)雜程度是不一定的,因此我們需要對這套程序進(jìn)行高度的抽象,這樣才能將業(yè)務(wù)邏輯和抽象進(jìn)行相分離,才能夠讓這套程序的可擴(kuò)展性變的極強(qiáng),這也是在開發(fā)中會(huì)使用策略模式的強(qiáng)大之處。好了讀到這兒,我相信從來沒有接觸過這種設(shè)計(jì)模式的讀者來說,還是一頭霧水,接下來我就開始通過多線程來請出我們的"策略模式"。

       先看代碼再解釋:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 public static void main(String[] args) { 2         //創(chuàng)建線程一: 3         new Thread(new Runnable() { 4             @Override 5             public void run() { 6                 int i=100; 7                 while(i>0){ 8                     System.out.println("創(chuàng)建的線程一:"+i--); 9                 }10             }11         }).start();12         //創(chuàng)建線程二:13         new Thread(new Runnable() {14             @Override15             public void run() {16                 int i=100;17                 while(i>50){18                     System.out.println("創(chuàng)建的線程二:"+i--);19                 }20             }21         }).start();22         //主線程:23         int i=0;24         while(i<100){25             System.out.println("主線程:"+i++);26         }27 28     }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       上面這段代碼是一個(gè)最簡單的多線程案例,這段程序總共由3個(gè)線程來同時(shí)執(zhí)行(當(dāng)然除此之外還有Java虛擬機(jī)的垃圾回收等等其他一些線程),并交錯(cuò)打印變量的值。在這兒我們先暫時(shí)停一下,我想反問各位一個(gè)問題,為什么我們重寫的是Runnable接口的run()方法,但是開啟線程的卻是start()方法?沒錯(cuò),正是"策略模式"在操控,什么?還有這種操作。哈哈哈,我當(dāng)時(shí)學(xué)習(xí)這種設(shè)計(jì)模式的時(shí)候也是各種奇怪,各種撞墻,不過還好我通過了一個(gè)實(shí)例至少簡單明白了它是如何操控的。

下面我就通過一個(gè)實(shí)例讓各位讀者切身體會(huì)一下策略模式的好處和強(qiáng)大。需求:設(shè)計(jì)一個(gè)隨心所欲的算法器

       第一步:只需設(shè)計(jì)一個(gè)算法接口即可,主要是因?yàn)橐?guī)范或者讓程序知道如何進(jìn)行調(diào)用。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

1 /**2  * 算法接口3  * @author zxz4  *5  */6 interface CalculatorInterface{7     int calc(int x,int y);8 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第二步:就是整個(gè)程序的結(jié)構(gòu),也就是算法器的高度抽象部分,里面約束了整個(gè)程序的框架和大概流程,但是最重要的是并未涉及到業(yè)務(wù)層面的東西,因?yàn)槲疫@個(gè)需求是設(shè)計(jì)一個(gè)算法器,肯定是有數(shù)據(jù)流入流出的,那么它就是將數(shù)據(jù)的流入流出做了規(guī)范,只是提供了一個(gè)默認(rèn)的邏輯實(shí)現(xiàn)。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 /** 2  * 算法器 3  */ 4 class Calculator{ 5     private int x=0; 6     private int y=0; 7     private CalculatorInterface calculatorInterface = null; 8      9     public Calculator(int x, int y) {10         this.x = x;11         this.y = y;12     }13     14     public Calculator(int x, int y,CalculatorInterface calculatorInterface) {15         this(x,y);16         this.calculatorInterface = calculatorInterface;17     }18     19     public int calc(int x,int y){20         return x+y;21     }22     //只需關(guān)注接口,并且將接口用到的參數(shù)傳遞進(jìn)去即可,不必?fù)?dān)心具體的業(yè)務(wù)是如何封裝的【這段代碼請各位好好斟酌】23     public int result(){24         if(null!=calculatorInterface){25             return calculatorInterface.calc(x, y);26         }27         return calc(x, y);28     }29 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第三步:額外定義加法和減法算法類,為了下面的測試使用。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 /** 2  * 加法算法 3  */ 4 class AddStrategy implements CalculatorInterface{ 5     @Override 6     public int calc(int x, int y) { 7         return x+y; 8     } 9 }10 /**11  * 減法算法12  */13 class SubStrategy implements CalculatorInterface{14     @Override15     public int calc(int x, int y) {16         return x-y;17     }18 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第四步:我們開始測試,看看現(xiàn)象應(yīng)該就能明白策略模式是如何低調(diào)的。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 /** 2  * 主程序 3  */ 4 public class Strategy { 5      6     public static void main(String[] args) { 7         //沒有任何策略時(shí)的結(jié)果 8         Calculator c = new Calculator(33, 3); 9         System.out.println(c.result());10         11         //傳入減法策略的結(jié)果12         Calculator c1 = new Calculator(33, 3,new SubStrategy());13         System.out.println(c1.result());14         15         //【是時(shí)候展示真正的技術(shù)了】策略模式的強(qiáng)大,在這里算法可以隨意設(shè)置,只要你使用接口方式創(chuàng)建對象16         int result = new Calculator(33, 3,new CalculatorInterface() {17             @Override18             public int calc(int x, int y) {19                 return (x+y)/2;20             }21         }).result();22         System.out.println(result);23     }24 25 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       最后,策略設(shè)計(jì)模式的實(shí)現(xiàn)過程算是完成了,主要就是這套代碼,需要各位自己斟酌,如有不對的地方留言指正,共勉。

天天氣非常好,下著淅淅瀝瀝的小雨,刮著風(fēng),感覺甚好;我在北京向各位問好。這幾天公司基本沒什么事兒,從昨天開始就復(fù)習(xí)了一下多線程編程,今天給各位分享一種Java23種設(shè)計(jì)模式中最常見的設(shè)計(jì)模式--策略模式。為什么將策略模式和多線程綁在一起呢,不知道各位有沒有注意過我們在進(jìn)行多線程編程的時(shí)候,創(chuàng)建線程的方式有2種,一種是繼承Thread類,另外一種就是實(shí)現(xiàn)Runnable接口;當(dāng)然,我們會(huì)毫不保留的選擇第二種,因?yàn)閿U(kuò)展性強(qiáng),習(xí)慣接口開發(fā)等等原因,但是第二種方式還潛藏了23種Java設(shè)計(jì)模式中的其中一個(gè)模式,那就是低調(diào)而又強(qiáng)勢的"策略模式"。

       說說策略模式吧,這種模式的設(shè)計(jì)思想就是:為了考慮業(yè)務(wù)邏輯的千變?nèi)f化和復(fù)雜程度是不一定的,因此我們需要對這套程序進(jìn)行高度的抽象,這樣才能將業(yè)務(wù)邏輯和抽象進(jìn)行相分離,才能夠讓這套程序的可擴(kuò)展性變的極強(qiáng),這也是在開發(fā)中會(huì)使用策略模式的強(qiáng)大之處。好了讀到這兒,我相信從來沒有接觸過這種設(shè)計(jì)模式的讀者來說,還是一頭霧水,接下來我就開始通過多線程來請出我們的"策略模式"。

       先看代碼再解釋:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 public static void main(String[] args) { 2         //創(chuàng)建線程一: 3         new Thread(new Runnable() { 4             @Override 5             public void run() { 6                 int i=100; 7                 while(i>0){ 8                     System.out.println("創(chuàng)建的線程一:"+i--); 9                 }10             }11         }).start();12         //創(chuàng)建線程二:13         new Thread(new Runnable() {14             @Override15             public void run() {16                 int i=100;17                 while(i>50){18                     System.out.println("創(chuàng)建的線程二:"+i--);19                 }20             }21         }).start();22         //主線程:23         int i=0;24         while(i<100){25             System.out.println("主線程:"+i++);26         }27 28     }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       上面這段代碼是一個(gè)最簡單的多線程案例,這段程序總共由3個(gè)線程來同時(shí)執(zhí)行(當(dāng)然除此之外還有Java虛擬機(jī)的垃圾回收等等其他一些線程),并交錯(cuò)打印變量的值。在這兒我們先暫時(shí)停一下,我想反問各位一個(gè)問題,為什么我們重寫的是Runnable接口的run()方法,但是開啟線程的卻是start()方法?沒錯(cuò),正是"策略模式"在操控,什么?還有這種操作。哈哈哈,我當(dāng)時(shí)學(xué)習(xí)這種設(shè)計(jì)模式的時(shí)候也是各種奇怪,各種撞墻,不過還好我通過了一個(gè)實(shí)例至少簡單明白了它是如何操控的。

下面我就通過一個(gè)實(shí)例讓各位讀者切身體會(huì)一下策略模式的好處和強(qiáng)大。需求:設(shè)計(jì)一個(gè)隨心所欲的算法器?

       第一步:只需設(shè)計(jì)一個(gè)算法接口即可,主要是因?yàn)橐?guī)范或者讓程序知道如何進(jìn)行調(diào)用。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

1 /**2  * 算法接口3  * @author zxz4  *5  */6 interface CalculatorInterface{7     int calc(int x,int y);8 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第二步:就是整個(gè)程序的結(jié)構(gòu),也就是算法器的高度抽象部分,里面約束了整個(gè)程序的框架和大概流程,但是最重要的是并未涉及到業(yè)務(wù)層面的東西,因?yàn)槲疫@個(gè)需求是設(shè)計(jì)一個(gè)算法器,肯定是有數(shù)據(jù)流入流出的,那么它就是將數(shù)據(jù)的流入流出做了規(guī)范,只是提供了一個(gè)默認(rèn)的邏輯實(shí)現(xiàn)。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 /** 2  * 算法器 3  */ 4 class Calculator{ 5     private int x=0; 6     private int y=0; 7     private CalculatorInterface calculatorInterface = null; 8      9     public Calculator(int x, int y) {10         this.x = x;11         this.y = y;12     }13     14     public Calculator(int x, int y,CalculatorInterface calculatorInterface) {15         this(x,y);16         this.calculatorInterface = calculatorInterface;17     }18     19     public int calc(int x,int y){20         return x+y;21     }22     //只需關(guān)注接口,并且將接口用到的參數(shù)傳遞進(jìn)去即可,不必?fù)?dān)心具體的業(yè)務(wù)是如何封裝的【這段代碼請各位好好斟酌】23     public int result(){24         if(null!=calculatorInterface){25             return calculatorInterface.calc(x, y);26         }27         return calc(x, y);28     }29 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第三步:額外定義加法和減法算法類,為了下面的測試使用。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 /** 2  * 加法算法 3  */ 4 class AddStrategy implements CalculatorInterface{ 5     @Override 6     public int calc(int x, int y) { 7         return x+y; 8     } 9 }10 /**11  * 減法算法12  */13 class SubStrategy implements CalculatorInterface{14     @Override15     public int calc(int x, int y) {16         return x-y;17     }18 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第四步:我們開始測試,看看現(xiàn)象應(yīng)該就能明白策略模式是如何低調(diào)的。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 /** 2  * 主程序 3  */ 4 public class Strategy { 5      6     public static void main(String[] args) { 7         //沒有任何策略時(shí)的結(jié)果 8         Calculator c = new Calculator(33, 3); 9         System.out.println(c.result());10         11         //傳入減法策略的結(jié)果12         Calculator c1 = new Calculator(33, 3,new SubStrategy());13         System.out.println(c1.result());14         15         //【是時(shí)候展示真正的技術(shù)了】策略模式的強(qiáng)大,在這里算法可以隨意設(shè)置,只要你使用接口方式創(chuàng)建對象16         int result = new Calculator(33, 3,new CalculatorInterface() {17             @Override18             public int calc(int x, int y) {19                 return (x+y)/2;20             }21         }).result();22         System.out.println(result);23     }24 25 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       最后,策略設(shè)計(jì)模式的實(shí)現(xiàn)過程算是完成了,主要就是這套代碼,需要各位自己斟酌,如有不對的地方留言指正,共勉。

天天氣非常好,下著淅淅瀝瀝的小雨,刮著風(fēng),感覺甚好;我在北京向各位問好。這幾天公司基本沒什么事兒,從昨天開始就復(fù)習(xí)了一下多線程編程,今天給各位分享一種Java23種設(shè)計(jì)模式中最常見的設(shè)計(jì)模式--策略模式。為什么將策略模式和多線程綁在一起呢,不知道各位有沒有注意過我們在進(jìn)行多線程編程的時(shí)候,創(chuàng)建線程的方式有2種,一種是繼承Thread類,另外一種就是實(shí)現(xiàn)Runnable接口;當(dāng)然,我們會(huì)毫不保留的選擇第二種,因?yàn)閿U(kuò)展性強(qiáng),習(xí)慣接口開發(fā)等等原因,但是第二種方式還潛藏了23種Java設(shè)計(jì)模式中的其中一個(gè)模式,那就是低調(diào)而又強(qiáng)勢的"策略模式"。

       說說策略模式吧,這種模式的設(shè)計(jì)思想就是:為了考慮業(yè)務(wù)邏輯的千變?nèi)f化和復(fù)雜程度是不一定的,因此我們需要對這套程序進(jìn)行高度的抽象,這樣才能將業(yè)務(wù)邏輯和抽象進(jìn)行相分離,才能夠讓這套程序的可擴(kuò)展性變的極強(qiáng),這也是在開發(fā)中會(huì)使用策略模式的強(qiáng)大之處。好了讀到這兒,我相信從來沒有接觸過這種設(shè)計(jì)模式的讀者來說,還是一頭霧水,接下來我就開始通過多線程來請出我們的"策略模式"。

       先看代碼再解釋:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

 1 public static void main(String[] args) { 2         //創(chuàng)建線程一: 3         new Thread(new Runnable() { 4             @Override 5             public void run() { 6                 int i=100; 7                 while(i>0){ 8                     System.out.println("創(chuàng)建的線程一:"+i--); 9                 }10             }11         }).start();12         //創(chuàng)建線程二:13         new Thread(new Runnable() {14             @Override15             public void run() {16                 int i=100;17                 while(i>50){18                     System.out.println("創(chuàng)建的線程二:"+i--);19                 }20             }21         }).start();22         //主線程:23         int i=0;24         while(i<100){25             System.out.println("主線程:"+i++);26         }27 28     }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       上面這段代碼是一個(gè)最簡單的多線程案例,這段程序總共由3個(gè)線程來同時(shí)執(zhí)行(當(dāng)然除此之外還有Java虛擬機(jī)的垃圾回收等等其他一些線程),并交錯(cuò)打印變量的值。在這兒我們先暫時(shí)停一下,我想反問各位一個(gè)問題,為什么我們重寫的是Runnable接口的run()方法,但是開啟線程的卻是start()方法?沒錯(cuò),正是"策略模式"在操控,什么?還有這種操作。哈哈哈,我當(dāng)時(shí)學(xué)習(xí)這種設(shè)計(jì)模式的時(shí)候也是各種奇怪,各種撞墻,不過還好我通過了一個(gè)實(shí)例至少簡單明白了它是如何操控的。

下面我就通過一個(gè)實(shí)例讓各位讀者切身體會(huì)一下策略模式的好處和強(qiáng)大。需求:設(shè)計(jì)一個(gè)隨心所欲的算法器?

       第一步:只需設(shè)計(jì)一個(gè)算法接口即可,主要是因?yàn)橐?guī)范或者讓程序知道如何進(jìn)行調(diào)用。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

1 /**2  * 算法接口3  * @author zxz4  *5  */6 interface CalculatorInterface{7     int calc(int x,int y);8 }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

       第二步:就是整個(gè)程序的結(jié)構(gòu),也就是算法器的高度抽象部分,里面約束了整個(gè)程序的框架和大概流程,但是最重要的是并未http://www.cnblogs.com/1315925303zxz/p/7238539.html