Java创建型模式

在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。

创建型模式由两个主导思想构成。一是将系统使用的具体类封装起来,二是隐藏这些具体类的实例创建和结合的方式。

创建型模式又分为对象创建型模式和类创建型模式。对象创建型模式处理对象的创建,类创建型模式处理类的创建。详细地说,对象创建型模式把对象创建的一部分推迟到另一个对象中,而类创建型模式将它对象的创建推迟到子类中。

创建型模式旨在将系统与它的对象创建、结合、表示的方式分离。这些设计模式在对象创建的类型、主体、方式、时间等方面提高了系统的灵活性。

创建型模式的特点和分类

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产。

创建型模式分为以下几种。

单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。

原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。

工厂方法(FactoryMethod)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。

抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。

建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

以上 5 种创建型模式,除了工厂方法模式属于类创建型模式,其他的全部属于对象创建型模式,我们将在之后的教程中详细地介绍它们的特点、结构与应用。

使用

现代软件工程更加依赖对象的组合,而不是类的继承,强调从硬编码的行为转变到定义一组基本行为来组合成复杂的行为。硬编码的行为不够灵活,因为如果想要改变设计的一部分,需要通过重写或者重新实现才能完成。另外,硬编码没有提高重用性,而且难以跟踪错误。由于这些原因,创建型模式比硬编码的行为更有用。创建型模式使设计变得更灵活,提供了不同的方式,从代码中移除了对需要实例化的具体类的引用。换句话说,这些模式增强了对象和类之间的独立性。

在以下情况中,可以考虑应用创建型模式:

▪ 一个系统需要和它的对象和产品的创建相互独立。

▪ 一组相关的对象被设计为一起使用。

▪ 隐藏一个类库的具体实现,仅暴露它们的接口。

▪ 创建独立复杂对象的不同表示。

▪ 一个类希望它的子类实现它所创建的对象。

▪ 类的实例化在运行时才指定。

▪ 一个类只能有一个实例,而且这个实例能在任何时候访问到。

▪ 实例应该能在不修改的情况下具有可扩展性。

举例

创建型设计模式的一些例子如下:

▪ 抽象工厂模式,提供一个创建相关或依赖对象的接口,而不指定对象的具体类。

▪ 工厂方法模式,允许一个类的实例化推迟到子类中进行。

▪ 生成器模式,将一个复杂对象的创建与它的表示分离,使同样的创建过程可以创建不同的表示。

▪ 延迟初始化模式,将对象的创建,某个值的计算,或者其他代价较高的过程推迟到它第一次需要时进行。

▪ 对象池模式,通过回收不再使用的对象,避免创建和销毁对象时代价高昂的获取和释放资源的过程。

▪ 原型模式,使用原型实例指定要创建的对象类型,通过复制原型创建新的对象。

▪ 单例模式,保证一个类只有一个实例,并且提供对这个实例的全局访问方式。

java创建型_Java创建型模式相关推荐

  1. java范形_java范型简介

    java范型简介 一.简单认识java范型 经常听人说"范型",我一直不是太明白什么叫"范型",今天就查阅了一些文章,给我的第一感觉就是之所以在java中用范型 ...

  2. Java范值_Java范型

    定义类的时候,不为类的属性或方法的参数设置具体的类型,只使用一个标记表示,类使用的时候才动态地绑定一种数据类型,这就是范型. 如果应用使用了范型的类时没有指定类型,则会使用默认的类型Object. 1 ...

  3. java for循环创建线程_Java创建线程的两种方法

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  4. java 创建 时间_java创建Date日期时间笔记

    (1)public Date() 创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间. 例: Java代码 1.Date today=new Date();  //today被设置成创建时刻相 ...

  5. java new数组_Java创建数组的几种方式

    1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...

  6. java 创建多线程_Java创建多线程

    Java创建多线程 下一节> 到目前为止,我们仅用到两个线程:主线程和一个子线程.然而,你的程序可以创建所需的更多线程.例如,下面的程序创建了三个子线程: // Create multiple ...

  7. java 整型_Java整型计算

    整型计算 今天做LeetCode看到一道题,翻转整型,其中一行代码if ((newResult - tail) / 10 != result)表示超出范围就会有损失,有点不太明白,正好之前复习过原码, ...

  8. java singleton 多线程_Java创建线程安全的单例singleton

    Java创建线程安全的单例 单例的使用场景 JVM中仅需要一个实例,因此能节省内存,加快访问速度,比如数据库连接池,计数器等.Spring 中的Bean,默认也是单例的,共享资源的访问,比如日志文件, ...

  9. java整形怎么转字符串型_java整型与字符串互转

    JAVA的整型与字符串相互转换 1字串 String 转换成整数 int 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt( ...

最新文章

  1. Cell:肠道菌群促进帕金森发生ParkinsonDisease
  2. golang之‘...‘的用法
  3. asterisk 配置 mysql_Asterisk的配置详解
  4. java jps监控_记录java虚拟机性能监控工具(jps与jstat)的使用
  5. 2007注册会计师考试
  6. Nginx负载均衡策略介绍
  7. CodeForces - 830C Bamboo Partition(数学+推公式)
  8. 三极管和MOS管有什么不一样?用MOS管还是三极管?
  9. 如何自学成为一名数据科学家?
  10. CentOS 7 安装 Python 3.6
  11. xml配置javaBean的IOC实现示例
  12. The Famous Clock
  13. 算法,PHP取数据库中百万条数据中随机20条记录
  14. XJad反编译工具下载链接及使用教程
  15. Protel 99 SE 应用技术问答
  16. QNX系统开启telnet远程登录
  17. Tajima‘s D群体遗传
  18. 希腊字母发音,打印体手写体对照
  19. 用计算机对人造卫星,人造卫星轨迹计算主要涉及计算机应用中的______
  20. Java模拟新浪微博登陆抓取数据

热门文章

  1. 坚持自主创新,凌波微步完成数千万A轮融资,加速半导体产业
  2. 我26岁,月薪一万,刚实现“黄焖鸡自由”(苦笑)
  3. 华为发布基于第二代英特尔®至强®可扩展处理器家族的新一代服务器
  4. 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
  5. 自动生成考勤表_可自动变色的考勤表,逢周末自动更新,你会制作吗?
  6. 80×60长40米的地笼_石家庄Q345矩形方管 220*80*8方管 华东地区
  7. 1分钟 搭建xxl-job任务调度中心
  8. JobDataMap传递参数_02
  9. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库 总览
  10. Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案