一. 策略模式
定義:策略模式定義了一系列的算法,并將每一個(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.java2)接下來就是錦囊了,用來放妙計(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.java3) 最后就是趙子龍登場的時(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.java2) 再定一個(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.java3) 兩個(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 }JiaShi5) 西門慶勾賈氏:

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
新聞熱點(diǎn)
疑難解答
圖片精選