设计模式学习之创建型模式学习总结

设计模式之创建型模式实验.docx ①使用简单工厂模式设计一个可以创建不同几何形状( Shape)(例如圆形( Circle).、矩形 Rectangle)和三角形( ( Triangle)等的绘图工具类,每个几何图形均具有绘制方法daw()和擦除方法 erase(),要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException异常。绘制类图并编程模拟实现。 ②在某网络管理软件中,需要为不同的网络协议提供不同的连接类,例如针对POP3协议的连接类POP3Connection、针对IMAP协议的连接类 IMAPConnection、针对HTTP协议的连接类 HTTPConnection等。 立即下载

    最近在家疯狂充电,学完深入挖掘asp.net2.0的课程之后,就开始了我的《面向对象设计模式纵横谈》课程。之前对设计模式有所了解,所以这次系统去学习和实践也还是蛮有意思的! 至于为什么要学习设计模式,Gof说是应付程序设计中各种各样的需求变化,也有朋友说是为了便于程序员之间的沟通,反正我觉得有了设计模式编程就不会那么单调了。先不管那么多为什么要学了,我总结一下我第一阶段所学(创建型模式)。

    Gof的《设计模式》书中介绍了23中设计模式,依据这23种设计模式的目的划分了三大类:

  • 创建型(Creational)模式:负责对象创建。
  • 结构型模式(Structural):处理类与对象间的组合。
  • 行为型模式(Behavioral):类与对象交互中的职责分配。

    在这一阶段的学习让我我深刻理解了创建型模式中的5大设计模式,下面听我一一来介绍和分析

     1.   Singleton单件模式(入门)

    Gof的描述为:保证一个类仅有一个实例,并且提供一个该类实例的全局访问点。
    在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
    单件模式通过编程语言实现的特征表现为:类和实例的创建合为一体,类包含了创建自身实例的方法,通过定义静态的自身实例对象和静态的方法来返回自身的实例。

      2.   Abstract Factory抽象工厂模式(常见)

    Gof的描述为:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
    在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
    抽象工厂类保证了“相互依赖对象”之间的关系,由一系列具体工厂负责具体“一系列相互依赖对象”的创建工作,使用面向对象的技术来“封装”变化点,来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。

     3.   Builder生成器模式

    Gof的描述为:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
    在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
        通过构造器抽象类来保障统一的构造过程,各个构造器类可以有各自不同的表示算法,提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变。

     4.    Factory  Method工厂方法模式

    Gof的描述为:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。
    在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。
    抽象工厂类保持了创建“单个变化对象”的稳定接口,由变化的具体工厂子类类来创建具体的“单个变化对象”,提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖该对象的对象”不随着需求改变而改变,较好地解决了这种紧耦合关系。
    Factory Method模式解决“单个对象”的需求变化,Abstract Factory 模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。

     5.    Prototype原型模式

    Gof的描述为:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。
    在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
    抽象类保持了稳定接口,并且定义了Clone方法其子类都能进行拷贝操作,以创建不同的对象。客户程序调用者和抽象类打交道,然后在任何需要的地方不断地Clone。Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
    Prototype模式中的Clone方法可以利用.NET中的Object类的MemberwiseClone()方法或者序列化来实现深拷贝。

     6.    总结

  • Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。
  • Factory Method, Abstract Factory, Builder都需要一个额外的工厂类来负责实例化“易变对象”,而rototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
  • 如果遇到“易变类”,起初的设计通常从FactoryMethod开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式( Abstract Factory,Builder , Prototype )。

    本次学习过程中的实践代码本人随后将提供下载!
 

软件设计模式实验报告 是软件设计模式的大部分模式设计方法,里面都有介绍具体的实例供大家参考。 立即下载

相关推荐

kivy--入门(一)(Windows)python

从零开始学习kivy 由于课程需要写一个app,还要写报告,这就很愁人,头秃,脑壳大。 虽然学过Android,但是小编对于Java就像对牛弹琴似的,不能说完全不懂,只能说Java这个语言不太适合我,不学还不行,还是先利用python的kivy编写一个吧。 在各大网站搜索开发app,发现适合写手机app的除了Android还有kivy,所以还是先学习如何使用吧! 文章目录从零开始学习kivy前言一、安装二、添加按钮+标签三、文本输入(TextInput)总结 前言 首先推荐这篇博客kivy的安装和使用

刘念卿的博客 9965

创造型设计模式详解与总结

设计模式是软件开发中的一个重要概念,旨在提供通用的解决方案来应对常见的设计问题。设计模式可以分为三大类:创造型模式、结构型模式和行为型模式。在这些模式中,**创造型设计模式**(Creational Design Patterns)专注于对象的创建,确保系统在面对复杂对象构建时具有更好的灵活性和可维护性。

fudaihb的博客 2109

数据库实验报告--MySQL

数据库完整版报告--MySQL 包括数据库创建、表的创建、视图以及授权和触发器的创建等内容,全是精华!看完点赞加收藏O(∩_∩)O~。

Mortalz7 4924

设计模式的总结一:模式的分类

Java设计模式总结一:分类

京湘玉 的博客 387

长期换衣行人重识别(Long-Term Clothes-Changing Person Reid)数据集汇总

长期换衣行人重识别任务中目前常用的数据集总览目前换衣数据集的主要问题数据集换衣/总体情况集统计DeepChange(2021)LaST(2021)COCAS(2020)VC-Clothes(2020)LTCC(2020)PRCC(2019)Celebrities-reID(2019) 总览 在长期换衣行人重识别的任务当中,数据集的获取(尤其是对于学术环境下)是一个难点,主要的困难有以下几点: 采集大规模的数据集比较困难。 采集不同的衣服的数据集比较困难。 采集不同衣服不同角度的数据集比较困难。 目前也有

KingsMan666的博客 8378

群晖NAS实战:从零部署Container Manager与Docker代理配置全攻略

本文详细介绍了在群晖NAS上从零部署Container Manager与配置Docker代理的完整流程。针对国内用户常见的镜像拉取问题,提供了图形化界面与SSH命令行两种解决方案,并分享了MySQL容器部署的实战案例。文章特别强调了网络配置技巧和日常维护方法,帮助用户高效管理NAS上的容器应用。

weixin_29254673的博客 1300

心得篇(二)——设计模式之创建型模式

工厂模式、单例模式、原型模式和建造者模式详谈

Hughes-T的博客 795

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5241

设计模式学习-创建型模式总结

前面几天的学习中,学习了常见设计模式中的创建型模式,分为简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、建造者模式、单例模式等。它们具有的共同优点是:创建型模式对于类的实例化过程进行了抽象,将对象的生成过程和对象的实现过程进行了分离,保证了的单一职责原则,调用方调用的时候,只需要知道获得对象的接口,并不要了解复杂的生成过程;同时由于只暴露了对外的接口,内部的实现细节修改起来也比较方便,符合开闭...

谢谢谢谢呵的博客 511

手把手教你学Simulink——基于Simulink的无迹卡尔曼滤波(UKF)控制仿真建模示例

本文详细介绍了在Simulink中实现无迹卡尔曼滤波(UKF)控制倒立单摆系统的完整过程。通过对比扩展卡尔曼滤波(EKF),重点阐述了UKF在处理强非线性系统时的优势:采用无迹变换(UT)通过确定性采样捕捉非线性特性,精度可达三阶泰勒展开且无需计算雅可比矩阵。文章分步骤讲解了状态空间定义、UKF参数设计、Simulink实现方法,以及结合LQR控制器的闭环系统搭建,并通过仿真验证UKF在大角度偏移情况下具有更优的估计精度和控制性能。最后还讨论了工程实践要点和扩展方向,为非线性系统控制提供了实用解决方案。

MHD0815的博客 96

深度学习助力台风路径预测:技术剖析与实战应用全攻略(基于LSTM模型)

摘要:深度学习技术在台风路径预测领域展现出巨大潜力。通过融合多源气象数据,深度学习模型如LSTM能有效处理时间序列数据,捕捉台风路径变化规律。与传统方法相比,深度学习模型在自动特征学习和处理复杂模式方面具有独特优势,提高了预测的准确性和实时性。然而,挑战依然存在,包括数据质量问题、模型可解释性不足以及极端台风的复杂性。未来,随着观测技术的进步和新算法的开发,深度学习将在台风路径预测中发挥更大作用,为防灾减灾提供更精准的决策支持。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2226

创建型模式总结

用一个系统创建的那些对象的类对系统进行参数化有两种常用方法。一种是生成创建对象的类的子类;这对应于使用Factory Method模式。这种方法的主要缺点是,仅为了改变产品类,就可能需要创建一个新的子类。这样的改变可能是级联的。例如,如果产品的创建者本身是由一个工厂方法创建的,那么你也必须重定义它的创建者。另一种系统进行参数化的方法更多的依赖于对象的复合:定义一个对象负责明确产品对象的类,并将它作为

sld880311的专栏 454

【制作100个unity游戏之22】3DRPG游戏开发07——其他详细的设计

我们会有有很多单例,如果每个单例都去写会很麻烦,所以我们定义泛型单例模式 Singleton,我们将所有的单例都继承这个泛型单例,就省略很多重复的工作定义一个GameManager类,继承Singleton,控制整个游戏的进度,比如如果主角死了,广播,游戏结束调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2576

【设计模式学习总结】—— 创建型模式

1. 简单工厂模式( Simple Factory Pattern ) 重要程度:4 ## 模式动机 **在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。** 例如:一个按钮系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观。 如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返

小牛肉的博客 1499

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

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

设计模式学习笔记——创建型模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑,使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。创建型模式包括五种设计模式:工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern)下面分别归纳一下这五...

zengyun_cool_2008的专栏 255

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

创建型设计模式学习笔记

创建型设计模式笔记

qq_42120843的博客 237

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

设计模式学习整理之创建型模式

  设计模式学习整理之创建型模式概述定义----通过抽象实例化的过程,帮助一个系统独立于如何创建、组合和表示它的那些对象。创建型模式属于对象创建模型。所谓对象创建模型就是说将实例化的工作委托给另一个对象来做。与之相对应的是类创建模型,这是一种通过继承改变被实例化的类。       创建型模式有两个重要的特点:1) 客户不知道创建的具体类是什么(除非看源代码)2) 隐藏了

Dean Chen的专栏 4025

设计模式学习总结一原则及创建型模式

1.设计模式目标:松耦合,模块化,应对需求变化,使软件可维护、可扩展、可复用、灵活性好。 2.实现手段:抽象、封装、继承、多态、反射、委托等。 3.设计模式原则:    DIP(Dependency-Inversion Principles)依赖倒置原则:(面向抽象/接口编程,细节依赖于抽象,高层、底层依赖于接口;例如CPU、内存条、硬盘与主板间面向接口实现使PC组装很容易);

Jerry's Home 782

创建型、结构型、行为型设计模式的学习理解

设计模式--23种模式的学习与汇总

493

设计模式学习笔记二:创建型模式

4.1 定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类4.2 新概念:产品等级结构(产品类型)–产品的继承结构,如父类抽象类电视机,其子类有海尔电视机、海信电视机、TCL电视机4.3 新概念:产品族(品牌)–同一个工厂生产的,位于不同产品等级结构中的一组产品,如:海尔电器工厂生产海尔电视机、海尔电冰箱等。

itman1010的博客 822

设计模式学习笔记——创建型设计模式

声明:本学习笔记阅读《掌握设计模式:23种经典模式实践、选择、价值与思想》记录,书的作者:Java全栈布道师。

weixin_44420750的博客 1485

菜鸟学习 设计模式——创建型

好长时间没有写博客,一直感觉再敲设计模式中的代码,突然感觉总结少了些!现在代码基本上敲完了,现在分模块的进行简单的总结:           首先我们看看设计模式中的创建型模式:是用来处理对象创建的,试图根据实际情况使用合适的方式创建对象。其实就是创建新的类或者对象。            一,工厂方法模式(FactoryMethod)             1,定义:定义一个用于创建

学会改变自己——才能突破 2871

设计模式学习总结-创建型模式

设计模式学习总结-创建型模式 五大创建型设计模式的注意事项: 1.单例(Singleton) 构造函数private或protected,防止外部实例化; 双层锁定实例化,防止多线程的多个实例化; 类要sealed,防止被继承后派生添加实例; 饿汉、懒汉两

[IT 男人帮] 的专栏 495

设计模式学习-创建型模式

近来看设计模式的一些内容,发现一些和自己认知有所不同:创建型模式的话,是最常用的模式,像singleton,factory,具体还有那种,就在看设计模式的过程中了解区分清楚的创建型模式: Factory Method: Abstract Factory Method Builder prototype singleton Simple Factory Factory Method特点:一个工厂构造一

春夜喜雨的专栏 783

Java设计模式学习——创建型

本文是笔者自己在参考大神关于设计模式的讲解并学习后记的小记,只用于自己以后复习用,其他同学若想学习设计模式的种种,请移步下面原文链接: http://blog.csdn.net/zhangerqing/article/details/8194653/综述都摘自原文: 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重

Roy_70的专栏 938
上一篇: .Net平台开发的技术规范与项目实践精华总结
下一篇: 设计模式总结
c_dotnet
博客等级 码龄21年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值