java设计模式

java 常用23中设计模式

痞子三分冷 提交于 2020-04-10 10:41:25
Java总共有23中常见的设计模式。它们主要可以分为3类,创建型,结构型以及行为型。 创建型的设计模式有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个唯一的全局访问点。 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或者互相依赖的对象的接口,而无需指定它们的具体类。 三、Factory Method,工厂方法:定义一个用于创建对象的接口,Factory Method将一个类的实例化延迟到了子类。 四、Builder,建造模式:将一个复杂类的构建和表示分离开来,使得具有相同构建过程的类可以具有不同的表示。 五、Prototype,原型模式:用原型实例来指定创建对象的种类,并且通过拷贝原型来创建新的对象。 行为型的设计模式有: 六、Itrator,迭代器模式:提供一个方法顺序的遍历一个聚合对象的内部元素,而无需曝露这个对象的内部表示。 七、Observer,观察者模式:定义对象之间一对多的关系,当一个对象发生变化时,依赖于它的对象都会得到相应的通知更新。 八、Templete Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类,Templete Method使得子类可以不改变算法的骨架就可以改变算法中的特定的步骤。 九、Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对用户进行参数化

我理解的--java 单例模式

限于喜欢 提交于 2020-04-07 05:55:25
这只是自己学习的笔记。 简单的说就是一个类只能创建一个实体(实体1 == 实体2), 一般情况下一个类可以创建无数个实体,比如一个class Cat cat1 = new Cat(); cat2 = new Cat(); cat1 == cat2 返回的是false。 要想cat1 == cat2,就用单利模式,这样有什么好处: 在 计算机系统中,线程池、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有 若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。 正常 单利模式 可以这样想 :java static的变量只有一个,属于类,那就可以利用这个关键字。创建一个实体可以用new或者写一个方法。如果new的话,就会在堆中创建的对象不等。可以用一个静态方法获取一个实体,而获取的这个实体应该是一个静态static的变量,这样的话,就可以实现上面的要求了。构造函数要写成私有的,防止用new创建实体。 上图的单利cat实例不是在堆中创建的,是在静态区创建的,只是为了好对比。 测试类 class Cat { private static Cat cat; private Cat() { } public static Cat getCat() { if (cat == null) { cat =

Java设计模式之抽象工厂模式

爷,独闯天下 提交于 2019-12-09 14:01:29
抽象工厂模式特点 抽象工厂模式与工厂模式最大的区别是每个单独的产品是一个工厂模式,而多个不同产品交互则是抽象工厂模式,抽象工厂模式通常要运用工厂模式的方法。通常,工厂模式的所有产品的创建都放在这个工厂里面,如果产品有所变更,则需要修改该工厂方法,违反了设计模式的开闭原则——对扩展开放,对修改关闭。而抽象工厂模式则认为当需要创建一个新的产品时,也创建一个新的工厂即可,不需要修改任何之前已有的代码。 抽象工厂案例图 从上图可以看出,如果要开发一个搜索的功能,而搜索功能又分为图片搜索和新闻搜索,图片搜索又可以再开发新功能,如风景图片搜索、明星图片搜索、动漫图片搜索;同样新闻搜索又可以再开发新功能,如文化新闻搜索、科技新闻搜索、经济新闻搜索。对于这样的一个强大的功能,可以使用抽象工厂模式,例如可以建一个搜索工厂,用于创建图片搜索和新闻搜索的接口,然后再定义两个小工厂,图片工厂和新闻工厂,实现搜索工厂这个接口,并且可以创建具体的搜索功能实例。 案例的具体代码实现 首先定义一个可搜索的接口,所有的被搜索对象均要实现这个接口,才可以被搜索到: package com.factory.abstractFactory; public interface Searchable { public void get(); } 定义搜索工厂接口,内部定义search()方法,任何一个子工厂都要实现该方法:

我理解的--java模板方法模式

时光总嘲笑我的痴心妄想 提交于 2019-12-06 06:45:07
从语言层次的角度只是单纯的抽象类的实现,在抽象类中哪些方法是抽象的,哪些需要子类实现,就需要业务上的要求了。使框架的分工更清晰,哪些人做哪些工作(架构师构造框架不可变、算法师实现算法可变),此模板简单而常用。 抽象方法 :需要子类实现的,不同的子类提供了不同的实现功能。(可变) 模版方法 :定义了主逻辑功能,里面用抽象方法来实现不同的功能。 (不可变) 抽象类 public abstract class Template { abstract void sort(int[] arr); void printArray(int[] arr) { sort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } } 具体实现子类:实现抽象类,不同的子类用不同的方法实现。 class TemplateImp extends Template { @Override void sort(int[] arr) { for (int i = 0; i < arr.length-1; i++) { for(int j = i; j < arr.length-1; j++){ if (arr[i] > arr[j + 1]) { int t; t = arr[i]; arr[i] = arr[j +