自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

對Java設計模式的總結

開發(fā) 后端
Java設計模式中有23中模式,下面只對其中五種常用的設計模式進行介紹,即單例模式、工廠模式、建造模式、門面模式和策略模式。

Java設計模式中有23中模式,下面只對其中五種常用的設計模式進行介紹:

1.單例模式(有的書上說叫單態(tài)模式其實都一樣) :

該模式主要目的是使內(nèi)存中保持1個對象。

具體看看下面的例子:

  1. package org.sp.singleton;  
  2.  
  3. //方法一  
  4. public class Singleton {  
  5. //將自身的實例對象設置為一個屬性,并加上Static和final修飾符  
  6. private static final Singleton instance = new Singleton();  
  7. //將構造方法設置成私有形式  
  8. private Singleton() {  
  9. }  
  10. //通過一個靜態(tài)方法向外界提供這個類的實例  
  11. public static Singleton getInstance() {  
  12.    return instance;  
  13. }}//方法二  
  14. class Singleton2 {  
  15.  
  16. private static Singleton2 instance2 = null;  
  17.  
  18. public static synchronized Singleton2 getInstance() {  
  19.  
  20.    if (instance2 == null)  
  21.     instance2 = new Singleton2();  
  22.    return instance2;  
  23. }  

注:這二個Java設計模式實現(xiàn)了一樣的功能,但個人推薦采用***種方法。

2.工廠模式

該Java設計模式主要功能是統(tǒng)一提供實例對象的引用。

具體看看下面的例子:

  1. view plaincopy to clipboardprint?  
  2. public class Factory{     
  3. public ClassesDao getClassesDao(){     
  4.    ClassesDao cd = new ClassesDaoImpl();     
  5.    return cd;     
  6. }     
  7. }     
  8.   interface ClassesDao{     
  9. public String getClassesName();     
  10.     
  11. }     
  12.   class ClassesDaoImpl implements ClassesDao {     
  13. public String getClassesName(){     
  14.    System.out.println("A班");     
  15. }     
  16. }     
  17.   class test     
  18. {     
  19. public static void main(String[] args){     
  20.    Factory f = new Factory();     
  21.    f.getClassesDao().getClassesName();     
  22. }     
  23. }  public class Factory{  
  24. public ClassesDao getClassesDao(){  
  25.    ClassesDao cd = new ClassesDaoImpl();  
  26.    return cd;  
  27. }  
  28. }interface ClassesDao{  
  29. public String getClassesName();  
  30.  
  31. }class ClassesDaoImpl implements ClassesDao {  
  32. public String getClassesName(){  
  33.    System.out.println("A班");  
  34. }  
  35. }class test  
  36. {  
  37. public static void main(String[] args){  
  38.    Factory f = new Factory();  
  39.    f.getClassesDao().getClassesName();  
  40. }  

這個是最簡單的例子了,就是通過工廠方法通過接口獲取對象的引用

3.建造模式

該模式其實就是說,一個對象的組成可能有很多其他的對象一起組成的,比如說,一個對象的實現(xiàn)非常復雜,有很多的屬性,而這些屬性又是其他對象的引用,可能這些對象的引用又包括很多的對象引用。封裝這些復雜性,就可以使用建造模式。

4.門面模式

這個模式個人感覺像是Service層的一個翻版。比如Dao我們定義了很多持久化方法,我們通過Service層將Dao的原子方法組成業(yè)務邏輯,再通過方法向上層提供服務。門面模式道理其實是一樣的。


具體看看這個例子:

  1. view plaincopy to clipboardprint?  
  2. interface ClassesDao{     
  3. public String getClassesName();     
  4.     
  5. }     
  6.   class ClassesDaoImpl implements ClassesDao {     
  7. public String getClassesName(){     
  8.    return "A班";     
  9. }     
  10. }     
  11.   interface ClassesDao2{     
  12. public String getClassesName();     
  13.     
  14. }     
  15.   class ClassesDaoImpl2 implements ClassesDao {     
  16. public String getClasses2Name(){     
  17.    return "B班";     
  18. }     
  19. }     
  20.   class ServiceManager     
  21. {     
  22. private ClassesDao cd = new ClassesDaoImpl();     
  23. private ClassesDao2 cd2 = new ClassesDaoImpl2();     
  24. public void printOut(){     
  25.    System.out.println(cd.getClassesName()+"   "+cd2.getClassesName());     
  26. }     
  27. };  interface ClassesDao{  
  28. public String getClassesName();  
  29.  
  30. }class ClassesDaoImpl implements ClassesDao {  
  31. public String getClassesName(){  
  32.    return "A班";  
  33. }  
  34. }interface ClassesDao2{  
  35. public String getClassesName();  
  36.  
  37. }class ClassesDaoImpl2 implements ClassesDao {  
  38. public String getClasses2Name(){  
  39.    return "B班";  
  40. }  
  41. }class ServiceManager  
  42. {  
  43. private ClassesDao cd = new ClassesDaoImpl();  
  44. private ClassesDao2 cd2 = new ClassesDaoImpl2();  
  45. public void printOut(){  
  46.    System.out.println(cd.getClassesName()+"   "+cd2.getClassesName());  
  47. }  
  48. }; 

雖然這個例子不全,但基本意思已經(jīng)很明顯了。

5.策略模式

這個模式是將行為的抽象,即當有幾個類有相似的方法,將其中通用的部分都提取出來,從而使擴展更容易。


具體看這個例子:

  1. view plaincopy to clipboardprint?  
  2. package org.sp.strategy;       
  3. /**    
  4. * 加法具體策略類    
  5. * @author 無盡de華爾茲    
  6. *    
  7. */    
  8. public class Addition extends Operation {       
  9. @Override    
  10. public float parameter(float a, float b) {     
  11.    return a+b;     
  12. }      
  13. }       
  14. package org.sp.strategy;       
  15. /**    
  16. * 除法具體策略類    
  17. * @author 無盡de華爾茲    
  18. *    
  19. */    
  20. public class Division extends Operation {       
  21. @Override    
  22. public float parameter(float a, float b) {     
  23.    return a/b;     
  24. }      
  25. }      
  26. package org.sp.strategy;      
  27. /**    
  28. * 乘法具體策略類    
  29. * @author 無盡de華爾茲    
  30. *    
  31. */    
  32. public class Multiplication extends Operation{      
  33. @Override    
  34. public float parameter(float a, float b) {     
  35.    return a*b;     
  36. }       
  37. }       
  38. package org.sp.strategy;     
  39.     
  40. /**    
  41. * 減法具體策略類    
  42. * @author 無盡de華爾茲    
  43. *    
  44. */    
  45. public class Subtration extends Operation {     
  46.     
  47. @Override    
  48. public float parameter(float a, float b) {     
  49.    return a-b;     
  50. }       
  51. }        
  52. package org.sp.strategy;       
  53. /**    
  54. * 抽象策略類也可以使用接口來代替    
  55. * @author 無盡de華爾茲    
  56. *    
  57. */    
  58. public abstract class Operation {     
  59.     
  60. public abstract float parameter(float a, float b);     
  61. }      
  62. package org.sp.strategy;     
  63.     
  64. /**    
  65. * 策略環(huán)境類     
  66. * @author 無盡de華爾茲    
  67. *    
  68. */    
  69. public class Condition {      
  70. public static final Addition add = new Addition();       
  71. public static final Subtration sub = new Subtration();       
  72. public static final Multiplication mul = new Multiplication();     
  73. public static final Division div = new Division();     
  74.     
  75. }     
  76. package org.sp.strategy;     
  77.     
  78. /**    
  79. * 測試客戶端    
  80. * @author 無盡de華爾茲    
  81. *    
  82. */    
  83. public class Client {     
  84.     
  85. public static void main(String[] args) {     
  86.    float a = 100;     
  87.    float b = 25;     
  88.        
  89.    System.out.println(Condition.div.parameter(a, b));     
  90. }       
  91. }   

以上便是對Java設計模式中五種常用的設計模式進行介紹。

 

【編輯推薦】

  1. 對Java編程思想的忠告
  2. 和我共同了解Java是什么
  3. 著名的Java論壇和網(wǎng)站
  4. 2009年十大Java技術解決方案
  5. 2008最值得學習的五種JAVA技術
責任編輯:仲衡 來源: CSDN博客
相關推薦

2012-07-10 02:01:53

設計模式命令模式

2013-05-27 12:59:22

設計模式GoF

2020-03-18 12:47:59

設計模式ERP

2021-04-19 21:25:48

設計模式到元

2010-04-15 17:31:10

Oracle存儲過程

2012-03-28 13:28:56

Java設計模式

2023-05-06 07:51:22

JavaFacade設計模式

2021-02-01 10:01:58

設計模式 Java單例模式

2012-05-16 17:15:04

Java設計模式

2011-11-17 16:03:05

Java工廠模式Clojure

2012-05-16 17:22:11

Java設計模式

2009-10-19 09:49:37

Java命令模式

2009-01-04 13:49:17

Java設計模式設計模式工廠模式

2023-09-22 11:58:49

2009-06-15 14:15:07

Java設計模式Java

2012-08-30 09:07:33

設計模式

2023-11-02 21:11:11

JavaScript設計模式

2012-07-10 01:59:12

設計模式

2013-05-23 15:59:00

線程池

2022-09-13 12:56:28

前端優(yōu)化
點贊
收藏

51CTO技術棧公眾號