Java 开发 设计模式 ----创建型模式【单例模式,工厂模式,建造者模式,原型模式】

Java设计模式-创造型设计模式 使用场景:构建器设计模式是构建复杂对象的另一种方法,仅当我们想要使用相同的对象构建过程构建不同类型的不可变对象时才应使用。 Builder模式:将复杂对象的构建与其表示分离,以便相同的构建过程可以创建多个不同的对象。Builder代码 User.java java类似 优势:减少构造器的参数,高度可读的链式方法调用中,创建实例无需传递null。实例始终以完整状态实例化,使用链式方法调用逐步添加属性。可以构建不可变对象,无需复杂创建。 缺点:代码冗长使用场景 原型设计模式用于应用程序需要创建一个类的大量实例 阅读详情

 

1、单例模式(Singleton)

基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

懒汉式

public class Singleton {  
    /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */  
    private static Singleton instance = null;  
  
    /* 私有构造方法,防止被实例化 */  
    private Singleton() {}  
  
    /* 1:懒汉式,静态工程方法,创建实例 */  
    public static Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
    }  
}  

输出:Singleton.getInstance().method();

优点:延迟加载(需要的时候才去加载),适合单线程操作
缺点: 线程不安全,在多线程中很容易出现不同步的情况,如在数据库对象进行的频繁读写操作时。

双重线程检查模式

public class SingletonInner {  
    private static volatile SingletonInner sInst = null;  // <<< 这里添加了 volatile  
  
    /** 
     * 私有的构造函数 
     */  
    private SingletonInner() {}  
  
    public static SingletonInner getInstance() {  
        SingletonInner inst = sInst;  // <<< 在这里创建临时变量
        if (inst == null) {
            synchronized (SingletonInner.class) {
                inst = sInst;
                if (inst == null) {
                    inst = new SingletonInner();
                    sInst = inst;
                }
            }
        }
        return inst;  // <<< 注意这里返回的是临时变量
    }
  
    protected void method() {  
        System.out.println("SingletonInner");  
    }  
}  

优点:延迟加载,线程安全
缺点: 写法复杂,不简洁

内部类的实现

public class SingletonInner {  
    /** 
     * 内部类实现单例模式 
     * 延迟加载,减少内存开销   
     */  
    private static class SingletonHolder {  
        private static SingletonInner instance = new SingletonInner();  
    }  
  
    /** 
     * 私有的构造函数 
     */  
    private SingletonInner() {}  
  
    public static SingletonInner getInstance() {  
        return SingletonHolder.instance;  
    }  
  
    protected void method() {  
        System.out.println("SingletonInner");  
    }  
}  

2、工厂方法模式(Factory Method)

  • 简单工厂模式Simple Factory:不利于产生系列产品;
  • 工厂方法模式Factory Method:又称为多形性工厂;
  • 抽象工厂模式Abstract Factory:又称为工具箱,产生产品族,但不利于产生新的产品;

 

    这个看起来分类好点

     https://blog.youkuaiyun.com/fcvtb/article/details/85222439

 

3、建造模式 (Builder)

基本概念:是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。

Builder模å¼

  • Builder:为创建一个Product对象的各个部件指定抽象接口。

  • ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,提供一个检索产品的接口

  • Director:构造一个使用Builder接口的对象。

  • Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。

为何使用

是为了将构建复杂对象的过程和它的部件解耦。注意:是解耦过程和部件。
因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮、方向盘、发动机,还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开。

如何使用

首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示。

首先,需要一个接口,它定义如何创建复杂对象的各个部件:

public interface Builder {

   //创建部件A  比如创建汽车车轮
    void buildPartA();

   //创建部件B 比如创建汽车方向盘
    void buildPartB();

   //创建部件C 比如创建汽车发动机
    void buildPartC();

   //返回最后组装成品结果 (返回最后装配好的汽车)
   //成品的组装过程不在这里进行,而是转移到下面的Director类中进行.
   //从而实现了解耦过程和部件
    Product getResult();
}

用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),也就是说Director的内容是如何将部件最后组装成成品:

public class Director {
    private Builder builder;
    public Director( Builder builder ) {
        this.builder = builder;
   }
   // 将部件partA partB partC最后组成复杂对象
   //这里是将车轮 方向盘和发动机组装成汽车的过程
    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

Builder的具体实现ConcreteBuilder:

  • 通过具体完成接口Builder来构建或装配产品的部件;
  • 定义并明确它所要创建的是什么具体东西;
  • 提供一个可以重新获取产品的接口。
public class ConcreteBuilder implements Builder {
 Part partA, partB, partC;
 public void buildPartA() {
  //这里是具体如何构建
 }
 public void buildPartB() {
  //这里是具体如何构建
 }
 public void buildPartC() {
  //这里是具体如何构建
 }
 public Product getResult() {
  //返回最后组装成品结果
 }
}

复杂对象:产品Product:

public interface Product { }

复杂对象的部件:

public interface Part { }

我们看看如何调用Builder模式:

ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();

Builder模式的应用

在Java实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池。"池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时一个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能。修改Builder模式中Director类使之能诊断"断肢"断在哪个部件上,再修复这个部件。

 

4、原型模式(Prototype)

原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中,复制对象是通过clone()实现的,先创建一个原型类:

public class Prototype implements Cloneable {  
  
    public Object clone() throws CloneNotSupportedException {  
        Prototype proto = (Prototype) super.clone();  
        return proto;  
    }  
}  

很简单,一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,因为Cloneable接口是个空接口,你可以任意定义实现类的方法名,如cloneA或者cloneB,因为此处的重点是super.clone()这句话,super.clone()调用的是Object的clone()方法,而在Object类中,clone()是native的。了解对象深、浅复制的概念:

  • 浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
  • 深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
public class Prototype implements Cloneable, Serializable {  
  
    private static final long serialVersionUID = 1L;  
    private String string;  
  
    private SerializableObject obj;  
  
    /* 浅复制 */  
    public Object clone() throws CloneNotSupportedException {  
        Prototype proto = (Prototype) super.clone();  
        return proto;  
    }  
  
    /* 深复制 */  
    public Object deepClone() throws IOException, ClassNotFoundException {  
  
        /* 写入当前对象的二进制流 */  
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        ObjectOutputStream oos = new ObjectOutputStream(bos);  
        oos.writeObject(this);  
  
        /* 读出二进制流产生的新对象 */  
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());  
        ObjectInputStream ois = new ObjectInputStream(bis);  
        return ois.readObject();  
    }  
  
    public String getString() {  
        return string;  
    }  
  
    public void setString(String string) {  
        this.string = string;  
    }  
  
    public SerializableObject getObj() {  
        return obj;  
    }  
  
    public void setObj(SerializableObject obj) {  
        this.obj = obj;  
    }  
  
}  
  
class SerializableObject implements Serializable {  
    private static final long serialVersionUID = 1L;  
}  

 

转载 

黑马程序员___java开发中的23种设计模式

https://www.cnblogs.com/miaozy/p/3685955.html

 

【Java基础】浅谈常见设计模式

https://www.cnblogs.com/cr330326/p/5627658.html

尚硅谷—韩顺平—图解 Java设计模式(创建型)(28~54) 一.:(~) 1.:    1)    2)    3)    4)    5)    6) 2.:    1)    2)    3)    4)    5)    6) 3.:    1)    2)    3)    4)    5)    6) 4.:    1)    2)    3)    4)    5)    6) 5.:    1)    2)    3)    4)    5)    6) 6.:    阅读详情

相关推荐

Java开发中的23种设计模式详解

https://blog.youkuaiyun.com/doymm2008/article/details/13288067?d=123 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方...

227

Java设计模式(二)Prototype(原型),Builder和Singleton(单态)

创建模式(二)Singleton(单态)确保每个类只有一个实例,并提供它的全局访问点 个人认为这是个最简单的模式,一般在以下情况下使用当一个类只能有一个实例,而且用户可以从一个众所周知的访问点访问它时,如非共享资源  Singleton的结构图很简单,就是一个类图但这是一个特殊的类1、私有的构造器2、所有的域都是私有的3、只有一个

四色专栏 1234

深入解析MATLAB四旋翼仿真案例asbQuadcopter的核心模块与优化技巧

本文深入解析了MATLAB/Simulink中的四旋翼无人机官方案例asbQuadcopter,详细拆解了其指令、传感器、控制器、本体与环境等核心模块的工作原理。重点探讨了经典的PID双环控制结构、传感器噪声模拟、模型替换方法以及系统化的PID参数调优技巧,旨在帮助用户从“开箱即用”过渡到深度定制与优化,构建更精准的仿真模型。

weixin_29171087的博客 361

Java中的创建型设计模式

创建型设计模式是软件工程中一类重要的设计模式,它们专注于对象创建过程的优化,通过隐藏对象的具体创建细节、提供灵活的创建方式以及支持对象的复用,提升代码的可读性、可维护性和可扩展性。本文将详细介绍Java中的五种创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式,包括它们的基本概念、应用场景及实现示例,帮助读者理解和掌握这些模式的应用。创建型设计模式是解决对象创建问题的有效工具,它们通过封装对象的创建过程、提供灵活的创建方式以及支持对象的复用,有助于编写出高内聚、低耦合的代码。

Hardway_King的博客 1051

从零到一:ArduPilot无人船PID调参实战指南

本文详细介绍了ArduPilot无人船PID调参的实战指南,从基础参数设定到高级调参技术,帮助用户掌握水面环境下的PID控制逻辑。通过案例分析和参数示例,解决无人船在空载、负载变化及不同水域环境中的航行问题,提升无人船的稳定性和精确度。

weixin_29266647的博客 507

正点原子lwIP实战指南——从FreeRTOS移植到网络应用开发

本文详细介绍了如何将轻量级TCP/IP协议栈lwIP移植到FreeRTOS实时操作系统上,并基于正点原子STM32开发板进行网络应用开发。内容涵盖从使用STM32CubeMX快速搭建工程、核心概念解析(RAW/NETCONN/Socket API),到关键的系统适配、驱动实现,并通过TCP Echo服务器和云台控制两个实战案例,手把手指导读者完成从移植到应用开发的全过程,帮助嵌入式开发者快速掌握lwIP在FreeRTOS环境下的稳定部署与开发技巧。

s4t5u6v的博客 1000

图解Java设计模式-23种设计模式

设计模式分为三种类型,共 23 种 1) 创建型模式 :单例模式 、抽象工厂模 式原型式、建 造者模式、工厂模 式。 2) 结构型模式 :适配器模式、桥接装饰模式 、组合模式、外观模式、享元模式、代理模式 。 3) 行为型模式 :模 版方法式、命令模式、访问者式、迭代器模式、观察者模式 、中介者模式、备忘录模式、解释器( Interpreter模式)、状态模式 、策略模式、职责链模式(责任链模式 )。 1.单例模式 所谓类的单例设计模式,就是采取一定方法保证在整个软件系统中对某只能存在一个对象实.

1404

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 989

java 单例模式_初探Java设计模式1:创建型模式(工厂,单例等)

Java 设计模式转自https://javadoop.com/post/design-pattern系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star、fork哈文章也将发表在我的个人博客,阅读体验更佳:www.how2playlife.com本文...

weixin_39827625的博客 117

使用OpenCV进行3D重建:详细指南

3D重建是计算机视觉领域的一项关键技术,它能够从二维图像中恢复出场景的三维结构。这项技术在机器人视觉、增强现实和3D建模等多个领域都有广泛的应用。在本篇技术博客中,我们将详细介绍如何使用OpenCV这一流行的计算机视觉库来实现3D重建。我们将逐步探讨整个过程,包括相机标定、特征点提取与匹配、立体校正、深度图计算以及最终的三维重建。3D重建是一个复杂的过程,涉及多个步骤和多种算法。OpenCV提供了强大的工具来支持这一过程,从相机标定到特征点提取与匹配,再到立体校正和深度图计算,最后实现三维重建。

weixin_41544125的博客 1317

Wazuh部署记录

Wazuh是一个免费的开源安全平台,统一了XDR和SIEM功能。它可以保护内部部署、虚拟化、容器化和基于云的环境中的工作负载。Wazuh帮助组织和个人保护其数据资产免受安全威胁。它被全球数千个组织广泛使用,从小型企业到大型企业。443:仪表盘界面访问端口1515:探针连接服务器端口1514:探针回传信息端口以上3个端口必须打开防火墙。

墨痕诉清风的博客 1561

创建型模式(Creational Patterns)

创建型设计模式的简单demo

一个有兴趣的程序员男孩 330

STM32(HAL库)驱动OLED

通过STM32F103C8T6单片机采用HAL库方式对0.96寸OLED(IIC通讯)屏幕进行驱动。

weixin_44597885的博客 8802

Java设计模式二 - 创建型模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。工厂模式定义了一个创建对象的接口,但由子类决定实例化的类是哪一个。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。原型模式通过复制现有实例来创建新实例。

justmyfreedom的博客 418

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

学习笔记-Java设计模式-创建型模式

Java设计原则&&模式学习笔记 说明 近期扫地生决定整合一下年初学习的设计模式,一来用于复习巩固,二来也希望可以把自己的整合与有需要的同学共勉。 扫地生在学习的过程中主要参考的是公众号“一角钱技术”的相关推文,同时也参考了下列几篇文章。对这些作者扫地生表示衷心的感谢。 参考文章1-Java设计原则 参考文章2-Java设计模式总结 参考文章3-23种设计模式速记 3、创建型模式...

dglx_的博客 276

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式(上)

设计模式(上):1.设计模式概述、2.创建者模式、3.结构型模式

雙馬程序猿 938

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java之美[从菜鸟到高手演变]之设计模式

Java之美[从菜鸟到高手演变]之设计模式 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解...

有趣的人生 一半是山川湖海 一半是初心情怀 117

设计模式

设计模式创建型模式单例模式工厂模式建造者模式原型模式结构型模式适配器模式 创建型模式 单例模式 工厂模式 说明:将同一类放到一起,再将这些类型再统一 // 最大的抽象 public interface ProductFactory { PhoneFactory phoneFactory(); RouterFactory routerFactory(); } /** * 手机 */ public interface PhoneFactory { void start();

qq_40749230的博客 411

Java设计模式:简介与常见模式

设计模式是软件开发中常用的解决方案和经验总结,它们提供了在特定情境下解决常见问题的可靠方式。Java作为一种广泛使用的编程语言,也有一系列经典的设计模式。本文将介绍Java中常见的设计模式,包括创建型模式、结构型模式和行为型模式,帮助读者理解和应用这些模式。

sanmansan的博客 82

Java的几种设计模式,java面试题,java基础笔试题,BAT

写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫码加微信好友进【程序员面试学习交流群】,免费领取。也欢迎各位一起在群里探讨技术。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8z9d6sTU-1652742714296)(http://s.baotutu.com/javazz201903.gif)] java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造

web15185420056的博客 141

【设计模式】(万字总结)深入理解Java中的创建型设计模式

本文将带领您深入探索Java中的创建型设计模式。我们将从简单的概念入手,逐步深入到每种模式的具体实现方式和实际应用场景。

c18213590220的博客 1369

23种设计模式(一)

设计模式分为三大类: 创建型,共五种:单例模式、静态工厂模式(普通工厂)、抽象工厂模式、建造者模式、原型模式。 结构型,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

weknow 703

【设计模式-进阶篇】23种设计模式精髓总结 适配器 外观 命令 代理 中介 模式比较

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)66个Java面试知识点架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)算法刷题(PDF)

H1767410的博客 700

初学设计模式

为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。

2301_76238237的博客 982

java设计模式

java设计模式 一、概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命...

weixin_30394669的博客 77
上一篇: Java 开发 设计模式 ----行为型模式【策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式】
下一篇: Java 开发 设计模式 ----结构型模式【 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式】
灯盏菜
博客等级 码龄10年 70粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值