首页 > 其他分享 >软件构造课程思考10

软件构造课程思考10

时间:2023-05-26 14:47:51浏览次数:59  
标签:10 适配 模式 课程 抽象 接口 构件 软件 装饰

11 面向可复用性和可维护性的设计模式

创建模式:工厂方法

结构模式

适配器模式:具有不兼容接口的类可以通过将其自己的接口包装在现有类的接口周围来协同工作
装饰器模式
行为模式:

策略模式:允许在运行时选择一系列算法中的一个
模板模式:规定抽象逻辑,实现细节需要实现
迭代器模式:顺序访问元素,不会表示泄漏
访问者模式:将算法和对象结构分开
为什么需要可复用性:

除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大

11.1 创建型模式
工厂方法模式:虚拟构造器

当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。

相比于通过构造器(new)构建对象:

静态工厂方法可具有指定的更有意义的名称
不必在每次调用的时候都创建新的工厂对象
可以返回原返回类型的任意子类型

11.2 结构化模式
11.2.1 适配器模式
主要解决类之间接口不兼容的问题。

通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。

主要有两种类型:继承/委托

适配器模式(Adapter)包含以下主要角色:

目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

11.2.2 装饰器模式
问题引出:当有许多子类需要自由组合的时候,Java无法多继承,也不适合顺序继承,因此需要一种机制可以为对象增加不同侧面的特性。

解决方法:对每一个特性构造子类,通过委派机制增加到对象上。装饰器同时使用子类型和委派。

装饰(Decorator)模式中的角色:

抽象构件(Component)角色 :定义一个抽象接口以规范准备接收附加责任的对象。
具体构件(Concrete Component)角色 :实现抽象构件,通过装饰角色为其添加一些职责。
抽象装饰(Decorator)角色 : 继承或实现抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
具体装饰(Concrete Decorator)角色 :实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
装饰者模式的核心是装饰类,这个类是个抽象类,是抽象构件的子类,同时与抽象构件具有委托关系,即在其内部调用了抽象构件。

标签:10,适配,模式,课程,抽象,接口,构件,软件,装饰
From: https://www.cnblogs.com/zzzzzzx/p/17434645.html

相关文章

  • 1049. 最后一块石头的重量 II
    有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x<=y。那么粉碎的可能结果如下:如果x==y,那么两块石头都会被完全粉碎;如果x!=y,那么重量为x的石头将会完全......
  • 直播软件搭建,css设置滚动条样式
    直播软件搭建,css设置滚动条样式设置滚动条样式/*滚动条样式*/    ul::-webkit-scrollbar{/*滚动条整体样式*/       4px;   /*高宽分别对应横竖滚动条的尺寸*/      height:4px;    }    ul::-webkit-scrollbar-thumb......
  • 牛客练习赛108
    风间分析:暴力实现:inta[N],b[N];voidsolve(){res=0;scanf("%lld",&n);for(inti=1;i<=n;i++)scanf("%lld",&a[i]);for(inti=1;i<=n;i++)scanf("%lld",&b[i]);......
  • 最完美WIN10_Pro_22H2.19045.3031软件选装纯净版VIP41.7
    【系统简介】=============================================================1.本次更新母盘来自网络某大神。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为19045.3031。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo-2.13.0.8》网卡版、......
  • FLEX实践—Error #1009 when use LinearAxis
    问题描述:FLEX应用中有三个states,通过下拉列表切换state,三个state中显示的控件分别为:datagrid,chart,datagrid/chart;当由只显示表格的视图切换到只显示图表的视图时,出现以下的错误:TypeError:Error#1009:无法访问空对象引用的属性或方法。atmx.charts.chartClasses::ChartLabel/upd......
  • MT4电脑版交易软件使用技巧有哪些?
    MT4交易软件作为连接券商平台与投资者之间的纽带,不仅是外汇金融机构的首选交易平台,也因其显著的优势成为了外汇投资者进行网上交易的重要平台。而MT4交易软件又分为电脑版和手机版,因为大多数投资者进行外汇投资时使用的是MT4电脑版软件,所以本文就来主要讲讲:MT4电脑版交易软件使用技......
  • 每个.NET开发都应该知道的10个.NET库
    有个.NET面试官反馈面试了一个小白,问他用过哪些.NET库,结果只回答上了几个。作为一个.NET开发者,了解一些常用的.NET库是非常重要的。本文将介绍.NET开发人员应该了解的10个常用.NET库,这些库可以帮助开发人员提高开发效率、简化开发流程,开发出优秀的.NET应用程序。1、AutoMapperAu......
  • 财务报表自动生成软件—VeryReport报表自动生成软件
    现代化的财务管理需要高效、准确、便捷的工具来支持,而VeryReport财务报表自动生成软件则为企业带来了全新的解决方案。VeryReport拥有多项优势,如高效、智能、数据驱动等特点,可以快速提升中小微企业的财务管理水平,从而提高企业整体运营效率。编辑搜图请点击输入图片描述(最多18字)多维......
  • Graphpad Prism9.5.1 科学绘图软件 下载安装教程(含Win/Mac)
    软件下载AutodeskFlame2024formac软件介绍AutodeskFlame破解版由是Autodesk公司(译作欧特克)开发的一款高端电影剪辑和特效制作系统。Flame是用于高速合成、高级图形和客户驱动的交互设计的终极视觉特效制作系统。AutodeskFlame提供出色的性能和荣获奥斯卡奖的工具。从......
  • 视频如何加字幕?视频添加字幕软件推荐!
    视频如何加字幕?在视频制作中,添加字幕有多种好处。首先,字幕可以让观众更好地理解视频内容,特别是对于不懂原始语言的观众来说。其次,字幕还可以提高视频的可访问性,让听力有障碍的观众也能够理解视频内容。此外,添加字幕还能够帮助搜索引擎更好地理解视频内容,提高视频在搜索结果中的排名......