温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java设计模式中有多少种模式

发布时间:2022-01-05 15:55:54 来源:亿速云 阅读:146 作者:小新 栏目:编程语言

这篇文章主要介绍Java设计模式中有多少种模式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

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

该模式主要目的是使内存中保持1个对象。

具体看看下面的例子:

package org.sp.singleton;   //方法一  public class Singleton {  //将自身的实例对象设置为一个属性,并加上Static和final修饰符  private static final Singleton instance = new Singleton();  //将构造方法设置成私有形式  private Singleton() {  }  //通过一个静态方法向外界提供这个类的实例  public static Singleton getInstance() {     return instance;  }}//方法二  class Singleton2 {   private static Singleton2 instance2 = null;   public static synchronized Singleton2 getInstance() {      if (instance2 == null)      instance2 = new Singleton2();     return instance2;  }  }

注:这二个Java设计模式实现了一样的功能,但个人推荐采用***种方法。

2.工厂模式

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

具体看看下面的例子:

view plaincopy to clipboardprint?  public class Factory{     public ClassesDao getClassesDao(){        ClassesDao cd = new ClassesDaoImpl();        return cd;     }     }       interface ClassesDao{     public String getClassesName();         }       class ClassesDaoImpl implements ClassesDao {     public String getClassesName(){        System.out.println("A班");     }     }       class test     {     public static void main(String[] args){        Factory f = new Factory();        f.getClassesDao().getClassesName();     }     }  public class Factory{  public ClassesDao getClassesDao(){     ClassesDao cd = new ClassesDaoImpl();     return cd;  }  }interface ClassesDao{  public String getClassesName();   }class ClassesDaoImpl implements ClassesDao {  public String getClassesName(){     System.out.println("A班");  }  }class test  {  public static void main(String[] args){     Factory f = new Factory();     f.getClassesDao().getClassesName();  }  }

这个是最简单的例子了,就是通过工厂方法通过接口获取对象的引用

3.建造模式

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

4.门面模式

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


具体看看这个例子:

view plaincopy to clipboardprint?  interface ClassesDao{     public String getClassesName();         }       class ClassesDaoImpl implements ClassesDao {     public String getClassesName(){        return "A班";     }     }       interface ClassesDao2{     public String getClassesName();         }       class ClassesDaoImpl2 implements ClassesDao {     public String getClasses2Name(){        return "B班";     }     }       class ServiceManager     {     private ClassesDao cd = new ClassesDaoImpl();     private ClassesDao2 cd2 = new ClassesDaoImpl2();     public void printOut(){        System.out.println(cd.getClassesName()+"   "+cd2.getClassesName());     }     };  interface ClassesDao{  public String getClassesName();   }class ClassesDaoImpl implements ClassesDao {  public String getClassesName(){     return "A班";  }  }interface ClassesDao2{  public String getClassesName();   }class ClassesDaoImpl2 implements ClassesDao {  public String getClasses2Name(){     return "B班";  }  }class ServiceManager  {  private ClassesDao cd = new ClassesDaoImpl();  private ClassesDao2 cd2 = new ClassesDaoImpl2();  public void printOut(){     System.out.println(cd.getClassesName()+"   "+cd2.getClassesName());  }  };

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

5.策略模式

这个模式是将行为的抽象,即当有几个类有相似的方法,将其中通用的部分都提取出来,从而使扩展更容易。


具体看这个例子:

view plaincopy to clipboardprint?  package org.sp.strategy;       /**    * 加法具体策略类    * @author 无尽de华尔兹    *    */    public class Addition extends Operation {       @Override    public float parameter(float a, float b) {        return a+b;     }      }       package org.sp.strategy;       /**    * 除法具体策略类    * @author 无尽de华尔兹    *    */    public class Division extends Operation {       @Override    public float parameter(float a, float b) {        return a/b;     }      }      package org.sp.strategy;      /**    * 乘法具体策略类    * @author 无尽de华尔兹    *    */    public class Multiplication extends Operation{      @Override    public float parameter(float a, float b) {        return a*b;     }       }       package org.sp.strategy;         /**    * 减法具体策略类    * @author 无尽de华尔兹    *    */    public class Subtration extends Operation {         @Override    public float parameter(float a, float b) {        return a-b;     }       }        package org.sp.strategy;       /**    * 抽象策略类也可以使用接口来代替    * @author 无尽de华尔兹    *    */    public abstract class Operation {         public abstract float parameter(float a, float b);     }      package org.sp.strategy;         /**    * 策略环境类     * @author 无尽de华尔兹    *    */    public class Condition {      public static final Addition add = new Addition();       public static final Subtration sub = new Subtration();       public static final Multiplication mul = new Multiplication();     public static final Division div = new Division();         }     package org.sp.strategy;         /**    * 测试客户端    * @author 无尽de华尔兹    *    */    public class Client {         public static void main(String[] args) {        float a = 100;        float b = 25;               System.out.println(Condition.div.parameter(a, b));     }       }

以上是“Java设计模式中有多少种模式”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI