国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

設(shè)計(jì)模式:策略、代理、單例

2019-11-14 21:20:48
字體:
供稿:網(wǎng)友
設(shè)計(jì)模式:策略、代理、單例

一. 策略模式

定義:策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。

先說這個(gè)場景中的要素:三個(gè)妙計(jì),一個(gè)錦囊,一個(gè)趙云。

1)妙計(jì):(一個(gè)接口,三個(gè)具體妙計(jì))

1 package com.henry.strategy;2 3 public interface IStrategy {4     5     public void Operate();6     7 }
IStrategy.java
 1 package com.henry.strategy; 2  3 public class BackDoor implements IStrategy { 4  5     @Override 6     public void operate() { 7         // TODO Auto-generated method stub 8         System.out.BackDoor.java
 1 package com.henry.strategy; 2  3 public class GivenGreenLight implements IStrategy { 4  5     @Override 6     public void operate() { 7         // TODO Auto-generated method stub 8         System.out.println("求吳國太開個(gè)綠燈,放行!"); 9     }10 11 }
GivenGreenLight.java
 1 package com.henry.strategy; 2  3 public class BlockEnemy implements IStrategy { 4  5     @Override 6     public void operate() { 7         // TODO Auto-generated method stub 8         System.out.println("孫夫人斷后,擋住追兵"); 9     }10 11 }
BlockEnemy.java

2)接下來就是錦囊了,用來放妙計(jì)的東東。

 1 package com.henry.strategy; 2  3 public class Context { 4      5     private IStrategy strategy; 6  7     public Context(IStrategy strategy) { 8         this.strategy = strategy; 9     }10     11     public void operate() {12         this.strategy.operate();13     }14 }
Context.java

3) 最后就是趙子龍登場的時(shí)候了。

 1 package com.henry.strategy; 2  3 public class ZhaoYun { 4      5     public static void main(String[] args) { 6         Context context; 7          8         //剛剛到吳國的時(shí)候拆第一個(gè) 9         System.out.println("-----------剛剛到吳國的時(shí)候拆第一個(gè)-------------");10         context = new Context(new BackDoor()); //拿到妙計(jì)11         context.operate(); //拆開執(zhí)行12         System.out.println("");13         14         //劉備樂不思蜀了,拆第二個(gè)了15         System.out.println("-----------劉備樂不思蜀了,拆第二個(gè)了-------------");16         context = new Context(new GivenGreenLight());17         context.operate(); //執(zhí)行了第二個(gè)錦囊了18         System.out.println("");19         20         //孫權(quán)的小兵追了,咋辦?拆第三個(gè)21         System.out.println("-----------孫權(quán)的小兵追了,咋辦?拆第三個(gè)-------------");22         context = new Context(new BlockEnemy());23         context.operate(); //孫夫人退兵24         System.out.println("");25     }26     27 }
ZhaoYun.java

二. 代理模式定義:為其他對象提供一種代理以控制對這個(gè)對象的訪問。在某些情況下,一個(gè)對象不適合或者不能直接引用另一個(gè)對象,而代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用。

場景:比如西門慶找潘金蓮,那潘金蓮不好意思答復(fù)呀,咋辦,找那個(gè)王婆做代理,表現(xiàn)在程序上時(shí)這樣的:1) 先定義一種類型的女人:

1 package com.henry.proxy;2 3 public interface KindWomen {4     5     public void makeEyesWithMan();6     public void happyWithMan();7     8 }
KindWomen.java

2) 再定一個(gè)丑陋的王婆:

 1 package com.henry.proxy; 2  3 public class WangPo implements KindWomen { 4  5     private KindWomen kindWomen; 6      7     public WangPo() { 8         this.kindWomen = new PanJinLian(); 9     }10     11     public WangPo(KindWomen kindWomen) {12         this.kindWomen = kindWomen;13     }14     15     @Override16     public void makeEyesWithMan() {17         // TODO Auto-generated method stub18         this.kindWomen.makeEyesWithMan();19     }20 21     @Override22     public void happyWithMan() {23         // TODO Auto-generated method stub24         this.kindWomen.happyWithMan();25     }26 27 }
WangPo.java

3) 兩個(gè)女主角都上場了,男主角也該出現(xiàn)了:

 1 package com.henry.proxy; 2  3 public class XiMenQing { 4      5     public static void main(String[] args) { 6         WangPo wangPo = new WangPo(); 7          8         wangPo.makeEyesWithMan(); 9         wangPo.happyWithMan();10     }11     12 }
XiMenQing.java

  那這就是活生生的一個(gè)例子,通過代理人實(shí)現(xiàn)了某種目的,如果真去掉王婆這個(gè)中間環(huán)節(jié),直接是西門慶和潘金蓮勾搭,估計(jì)很難成就武松殺嫂事件。

  那我們再考慮一下,水滸里還有沒有這類型的女人?有,盧俊義的老婆賈氏(就是和那個(gè)固管家茍合的那個(gè)),這名字起的:“假使”,那我們也讓王婆做她的代理:

4)把賈氏素描出來:

 1 package com.henry.proxy; 2  3 public class JiaShi implements KindWomen { 4  5     @Override 6     public void makeEyesWithMan() { 7         // TODO Auto-generated method stub 8         System.out.println("賈氏拋媚眼"); 9     }10 11     @Override12     public void happyWithMan() {13         // TODO Auto-generated method stub14         System.out.println("賈氏正在happy中......");15     }16 17 }
JiaShi

5) 西門慶勾賈氏:

 1 package com.henry.proxy; 2  3 public class XiMenQing2 { 4      5     public static void main(String[] args) { 6         JiaShi jiaShi = new JiaShi(); 7         WangPo wangPo = new WangPo(jiaShi); 8          9         wangPo.makeEyesWithMan();10         wangPo.happyWithMan();11     }12     13 }
XiMenQing2.java(1).職責(zé)清晰真實(shí)的角色就是實(shí)現(xiàn)實(shí)際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責(zé)的事務(wù),通過后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡潔清晰。(2).代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用,這樣起到了的作用和保護(hù)了目標(biāo)對象的作用。(3).高擴(kuò)展性

三. 單例模式

 1 package com.henry.singleton; 2  3 public class Emperor { 4     private static Emperor emperor = null; 5  6     private Emperor() { 7     } 8      9     public static Emperor getInstance() {10         if(emperor == null) {11             emperor = new Emperor();12         }13         return emperor;14     } 15     16     public static void emperorInfo(){17         System.out.println("我就是皇帝asdasdsdssd");18     }19 }
Emperor.java
 1 package com.henry.singleton; 2  3 public class Minister { 4     public static void main(String[] args) { 5         //First Day 6         Emperor emperor1 = Emperor.getInstance(); 7         emperor1.emperorInfo(); 8          9         //Second day10         Emperor emperor2 = Emperor.getInstance();11         emperor2.emperorInfo();12         13         //Third day14         Emperor emperor3 = Emperor.getInstance();15         emperor3.emperorInfo();16     }17 }
Minister.java


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巢湖市| 石台县| 和平县| 长岭县| 龙江县| 西平县| 赫章县| 广灵县| 师宗县| 龙岩市| 嘉善县| 靖西县| 株洲市| 乐山市| 根河市| 青川县| 临西县| 婺源县| 醴陵市| 昌乐县| 新兴县| 大埔县| 忻城县| 林芝县| 涿州市| 腾冲县| 河池市| 临泉县| 北票市| 萨嘎县| 疏附县| 米林县| 锡林郭勒盟| 廊坊市| 台中市| 大冶市| 阳谷县| 垦利县| 马山县| 金阳县| 长武县|