对Java设计模式的总结

开发 后端
Java设计模式中有23中模式,下面只对其中五种常用的设计模式进行介绍,即单例模式、工厂模式、建造模式、门面模式和策略模式。

Java设计模式中有23中模式,下面只对其中五种常用的设计模式进行介绍:

1.单例模式(有的书上说叫单态模式其实都一样) :

该模式主要目的是使内存中保持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. //通过一个静态方法向外界提供这个类的实例  
  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设计模式实现了一样的功能,但个人推荐采用***种方法。

2.工厂模式

该Java设计模式主要功能是统一提供实例对象的引用。

具体看看下面的例子:

  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.建造模式

该模式其实就是说,一个对象的组成可能有很多其他的对象一起组成的,比如说,一个对象的实现非常复杂,有很多的属性,而这些属性又是其他对象的引用,可能这些对象的引用又包括很多的对象引用。封装这些复杂性,就可以使用建造模式。

4.门面模式

这个模式个人感觉像是Service层的一个翻版。比如Dao我们定义了很多持久化方法,我们通过Service层将Dao的原子方法组成业务逻辑,再通过方法向上层提供服务。门面模式道理其实是一样的。


具体看看这个例子:

  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. }; 

虽然这个例子不全,但基本意思已经很明显了。

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. * 策略环境类     
  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论坛和网站
  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

2012-03-28 13:28:56

Java设计模式

2023-05-06 07:51:22

JavaFacade设计模式

2021-04-19 21:25:48

设计模式到元

2010-04-15 17:31:10

Oracle存储过程

2012-05-16 17:22:11

Java设计模式

2009-10-19 09:49:37

Java命令模式

2011-11-17 16:03:05

Java工厂模式Clojure

2012-05-16 17:15:04

Java设计模式

2021-02-01 10:01:58

设计模式 Java单例模式

2009-06-15 14:15:07

Java设计模式Java

2009-01-04 13:49:17

Java设计模式设计模式工厂模式

2023-09-22 11:58:49

2012-08-30 09:07:33

设计模式

2023-11-02 21:11:11

JavaScript设计模式

2013-05-23 15:59:00

线程池

2009-07-08 09:32:25

Java设计模式

2012-07-10 01:59:12

设计模式
点赞
收藏

51CTO技术栈公众号