设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

(例如房屋的设计稿,我们可以根据以前的设计创建新的房屋设计;或者军事中的孙子兵法,我们可以根据孙子兵法中的各种招式加以使用,以赢得战争的胜利。简言之,设计模式就是已经被前辈们抽象好的一些思想、工具,我们拿来根据自己的需要对其复用就好了)

创建型模式

一,Singleton,单例模式

有些对象只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等,如果创造出多个实例,就会导致许多问题,如占用过多的资源,结果不一致等。那么,如何保证整个应用中某个实例有且只有一个呢?单例模式!

  • 饿汉模式
  • /** 单例模式Singleton: 饿汉模式实例*/
    public class Singleton {//1.将构造方法私有化,不允许外部直接创建对象private Singleton() {}//2.创建类的唯一实例,使用static关键字,使其变为类的对象private static Singleton instance = new Singleton();//3.提供一个用于获取实例的方法,同时要设置为static,类的方法public static Singleton getInstance() {return instance;}
    }

    之所以称之为饿汉模式,是因为将其构造函数设置为private,通过创建static实例作为唯一实例,所以只要类一加载,该实例就生成了。(有种一个人很饥饿,一有机会马上吃饭的感觉O(∩_∩)O~,so...)

  • 懒汉模式
  • /** 懒汉模式*/
    public class Singleton2 {//1. 将构造方法私有化,不允许外部直接创建对象private Singleton2() {}//2. 声明类的唯一实例(注意并没有实例化)private static Singleton2 instance;//3. 提供一个用于获取实例的方法public static Singleton2 getInstance() {if(instance == null)instance = new Singleton2();return instance;}
    }

    之所以称之为懒汉模式,是因为相对于饿汉模式而言的,它不是类一加载就创建对象,而是等到用户使用时才去创建,因此称之为懒汉模式。

  • 测试两种方法
  • public class Test {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();if(s1 == s2) System.out.println("s1 equals s2");else System.out.println("s1 nonequals s2");Singleton2 s3 = Singleton2.getInstance();Singleton2 s4 = Singleton2.getInstance();if(s3 == s4)System.out.println("s3 equals s4");else System.out.println("s3 nonequals s4");}
    }
    //output:
    s1 equals s2
    s3 equals s4

  • 区别:饿汉模式的特点是加载类时比较慢(需要同时创建对象),但运行时获取对象的速度较快,线程安全;而懒汉模式的特点是加载类时较快,但运行时获取对象的速度较慢,线程不安全

二、Factory, 工厂模式

  • 工厂模式的概念

    • 实例化对象,用工厂方法代替new操作;
    • 工厂模式包括工厂方法模式和抽象工厂模式;
    • 抽象工厂模式是工厂方法模式的扩展。
  • 工厂模式的意图
    • 定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化;
    • 工厂方法把实例化的工作推迟到子类中去实现。
  • 工厂模式的应用场景
    • 有一组类似的对象需要创建;
    • 在编码时不能预见需要创建哪种实例。
    • 系统需要考虑扩展性,不应依赖于产品实例如何被创建、组合和表达的细节。
  • 工厂模式的设计思想
    • 尽量松耦合,一个对象的依赖对象的变化与本身无关;
    • 具体产品与客户端玻璃,责任分割
    • 客户端下命令,creator工厂来创建实例
  • 工厂模式的实例:
    • myotee脸萌,可以自由选择发行、脸型、眉毛等
    • 要做一个类似脸萌的软件,应该怎样构思呢?
    • 已发行为例,发型是由这个大产品中的一个小部件,如果制作出了发型,其他部分也都相似。

三、抽象工厂:Abstract Factory

抽象工厂是在工厂模式的基础上增加的一层抽象概念。抽象工厂是一个父类工厂,可以创建其他工厂类。“工厂的工厂”

四、建造者模式:Builder

  与工厂模式的区别:当创造一个对象需要很多步骤是适合使用建造者模式。而当只需调用一个方法就可以简单的创建整个对象时适合使用工厂模式。

转载于:https://www.cnblogs.com/little-YTMM/p/5397104.html

Java23个设计模式的简明教程相关推荐

  1. 23个设计模式的简明教程

    学习设计模式的方法有很多.全面深入地学习,可以选择经典设计模式书籍.或者通过简短.清晰的教程快速了解设计模式.本文整理了23个设计模式的简明教程,其中多篇以讲故事的方式来学习设计模式. 创建型模式 一 ...

  2. 设计模式23种通熟解释和简明教程

     1.factory(工厂)追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德 基,只管向服务员说"来四个鸡翅" ...

  3. 【软考 系统架构设计师 简明教程】简介与目录

    为了不辜负已经订阅了专栏的同学们的信任,所以本专栏不会有任何的优惠活动. 另外,当订阅人数每次达到2n(n>2)2^n(n>2)2n(n>2)时,订阅价格将会上涨10元. 所以,当下 ...

  4. python简明教程word版-计算机开放电子书归档 2018

    97 Things Every Programmer Should Know A Java Reference (UCB CS61b Textbook) AI Cheat Sheet Advanced ...

  5. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  6. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. *********************************     基础 ...

  7. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  8. CentOs6.5中安装和配置vsftp简明教程

    这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpd yum -y install vsftpd # ...

  9. sqlalchemy mysql_SQLAlchemy简明教程

    原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...

最新文章

  1. 关于整合spring+mybatis 第三种方式-使用注解
  2. 卫生统计学v是什么意思_四川大学华西公共卫生学院报考常见问题答疑
  3. java设计模式之设计原则③单一职责原则
  4. 树形结构与关系数据库之闭包表
  5. 【图像处理】——图像的灰度化处理(Python实现三种方法——最大值法、平均值法、加权均值法、gamma校正)
  6. Find them, Catch them POJ - 1703(种类并查集)
  7. 前后数据交互(ajax) -- 初始化页面表格
  8. 计算机网络之应用层:1、概述
  9. 数学建模 图论最短路径问题
  10. linux 挂载windows共享目录 is not a valid block device
  11. HDU3788 ZOJ问题【文本处理】
  12. LockSupport HotSpot里park/unpark的实现
  13. 关闭tomcat8080端口
  14. Windows 性能监视器概述
  15. html注释js,JavaScript 注释
  16. 微信表白神秘代码!快发给ta!(学习资料)
  17. 十:javaee会议管理系统实现过程之会议室管理功能的代码(完整详细有注释)
  18. stm32 火灾自动报警及联动控制源码_火灾自动报警系统设计规范 :联动控制
  19. banq修复_慧荣SM3271AB U盘量产加密及修好图文详细教程
  20. 金山词霸导致chrome浏览器出错

热门文章

  1. 程序布置到服务器上速度慢_百战程序员python面试题总结---高级语法(4)
  2. 苹果手机vnc进linux的服务器,linux服务器vnc远程连接,怎么使用linux服务器进行vnc远程连接?...
  3. jqueryui时间插件_jQueryUI Progressbar插件
  4. Selenium WebDriver架构
  5. VSCode调试Python时终端输出中文乱码解决方法1
  6. 开课吧:人工智能技术会如何影响青年就业
  7. Java面试题:面向对象的特征有哪些方面?
  8. C++基础教程之重载运算符和重载函数
  9. OCP 12c最新考试原题及答案(071-7)
  10. PHP如何有效实现多视频同时上传功能