-
02.7 用户操作(Command模式)2.7.1 封装一个请求 重点:Command模式通过将请求封装成对象,使得请求的参数化、排队和撤销操作变得容易。 总结:通过引入Command对象,解耦了请求的发起者和执行者,使得系统的扩展性和灵活性得以提高。 案例:在一个文本编辑器中,用户可能会执行“复制”、“粘贴”、“剪切”等操作。每个操作都可以封装成一个Command对象,使得这些操作可以统一管理,并且可以支持撤销和重做功能。 2.7.2 Command类及其子类 重点:Comm
-
0主要讲了command模式、Iterator模式、Visitor模式。 command模式 命令模式:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能 Iterator模式 它提供了一种访问聚合对象(例如列表、集合、数组等)中各个元素的方法,而无需暴露其内部表示。迭代器模式将遍历元素和访问元素的责任分离开来,使得代码更加灵活、可扩展和易于维护 Visitor模式 访问者模式是一种较为复杂的行
-
01、Command 类一般是一个抽象类或接口,定义了执行命令的接口。具体的Command子类实现了具体的请求。Command类及其子类通过统一接口,简化了请求的管理。用途:Command模式的结构清晰,方便扩展和维护。 2、terator类是迭代器模式的核心,定义了遍历集合对象的接口。具体的Iterator子类实现了具体的遍历逻辑。Iterator模式提供了一种解耦遍历逻辑和集合对象的优雅方法。 3、Visitor模式通过将操作封装到访问者对象中,使得可以在不改变被访问对象的情况
-
0通常当所选编程语言或技术缺少必要的抽象功能时, 人们才需要设计模式。 在这种情况下, 模式是一种可为语言提供更优功能的蹩脚解决方案。 例如, 策略模式在绝大部分现代编程语言中可以简单地使用匿名 (lambda) 函数来实现。 低效的解决方案 模式试图将已经广泛使用的方式系统化。 许多人会将这样的统一化认为是某种教条, 他们会 “全心全意” 地实施这样的模式, 而不会根据项目的实际情况对其进行调整。 如果你只有一把铁锤, 那么
-
02.7-2.9节继续介绍了之前提到的文本编辑器 对用户操作进行封装,实现撤销和重做、命令历史记录能力(使用了命令模式,对请求进行统一封装,将分散的功能进行集中访问) 通过迭代器模式实现了对象的遍历,将图元的各种遍历顺序进行封装 通过访问者模式实现了对象结构的充分扩展
-
0工厂方法模式(Factory Method) 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 结构:包含一个创建对象的抽象方法,由子类实现具体的对象创建。 优点:避免了在代码中显式地指定具体类,符合开放-封闭原则。使得新增对象类型时无需修改现有代码。 缺点:增加了代码的复杂性,因为需要引入新的子类。 抽象工厂模式(Abstract Factory) 定义:提供一个创建一系列相关或互相依赖对象的
-
0主要介绍用户操作功能以及介绍设计command命令模式的应用: 命令模式(Command)将类的业务行为以对象的方式封装,以便实现行为的参数化、撤销或重做等需求。 命令模式将请求封装为一个对象,隐藏了请求的具体实现细节,可以方便地添加新的命令类,无需修改现有代码,命令对象可以被存储、传递、排队、记录和修改,降低了系统耦合度,请求发送者和接收者之间通过命令对象交互,易于扩展,可以独立地添加新的命令。
-
0#### 2.7 用户操作(Command模式) ##### 2.7.1 封装一个请求 - **重点**:Command模式通过将请求封装成对象,使得请求的参数化、排队和撤销操作变得容易。 - **总结**:通过引入Command对象,解耦了请求的发起者和执行者,使得系统的扩展性和灵活性得以提高。 - **案例**:在一个文本编辑器中,用户可能会执行“复制”、“粘贴”、“剪切”等操作。每个操作都可以封装成一个Command对象,使得这些操作可以统一管理,并且可以支持撤销和重做功能。 ##### 2.7.2
-
0Command(命令模式) 核心思想:将操作封装为对象,使请求的发送者和执行者解耦。命令模式可以实现操作的队列化、记录日志、支持撤销与恢复等功能。 思考:在大型系统中,命令模式尤为适用,特别是涉及复杂操作链时,封装请求使得系统更具扩展性和灵活性。实际应用中可以用于任务调度、事务控制等场景。 Iterator(迭代器模式) 核心思想:提供一种方法遍历集合对象,而不暴露其内部实现。通过统一的接口,能以相同方式遍历不同类型的集
-
0工厂模式(Factory Pattern)提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。
-
0命令模式(Command)将类的业务行为以对象的方式封装,以便实现行为的参数化、撤销或重做等需求。 特点: 封装性:命令模式将请求封装为一个对象,隐藏了请求的具体实现细节。 扩展性:可以方便地添加新的命令类,无需修改现有代码。 灵活性:命令对象可以被存储、传递、排队、记录和修改。 优点: 降低了系统耦合度,请求发送者和接收者之间通过命令对象交互。 易于扩展,可以独立地添加新的命令。
-
1本章主要介绍了API重构的几个方法 将查询函数和修改函数分离:这一重构手法建议将仅进行查询的函数与具有修改功能的函数分开。这样可以确保查询函数没有副作用,提高代码的可预测性和可测试性。 函数参数化:通过将函数中不同的取值作为参数提取出来,可以增加函数的灵活性和复用性。这需要对修改后的函数进行全面测试,以确保没有引入新的错误。 移除标记参数:当函数中包含布尔标记参数时,这可能导致函数的行为变得复杂且难以理解
-
0主要讲了command模式、Iterator模式、Visitor模式。 command模式 命令模式:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能 Iterator模式 它提供了一种访问聚合对象(例如列表、集合、数组等)中各个元素的方法,而无需暴露其内部表示。迭代器模式将遍历元素和访问元素的责任分离开来,使得代码更加灵活、可扩展和易于维护。 迭代器模式的核心思想是抽象出一个迭
-
01、Command模式 改模式描述了怎么封装请求,也描述了一致性发送请求的接口,允许你配置客户端以处理不同请求。该接口保护了客户请求的实现。一个命令可以将所有或者部分请求委托给其他对象,也可不进行委托。 2、Iterator模式 Iterator模式描述了那些支持访问和遍历对象结构的技术,它不仅可以用来组合结构,也可以用于集合。该模式抽象了遍历算法,对用户隐藏了它所遍历对象的内部结构。Iterator模式再次说明怎么封装变化的概念,有助于我们获
-
0本次章节主要看了菜单项的实例来对command模式进行了讲解: 定义:将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或记录日志,以及支持可撤销的操作。 特点: 1. 将请求行为抽象成不同的对象,通过不同的参数或路径触发对象执行。 2. 支持撤销用户操作。 3.支持记录执行路径,可以重做。 例如菜单项里的每个子项都实现了一个抽象的命令类,不同的菜单子项会触发不同的请求作用到文档上。 优点: 1. 调用操
-
0在这几章中介绍了一些设计模式, 比如装饰器模式: 通过组合而非继承的方式扩展对象功能, 能够避免类的爆炸式增长,同时保持代码的清晰和可维护性。在实际开发中,利用装饰器模式可以轻松地为已有对象添加新功能,而无需修改原有代码,这种非侵入式的扩展方式极大地提高了代码的复用性和可维护性。 观察者模式:通过定义对象间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。 这种设计
-
0命令模式是一种行为设计模式,它的核心思想是将一个请求封装成一个对象,能够将请求转化为包含所有相关信息的独立对象,实现方法的参数化、请求的延迟执行或排队,以及可撤销操作。命令模式的主要目的是将发出请求的对象和执行请求的对象解耦。 模式架构:发送者负责初始化请求并触发命令,命令接口声明执行命令的方法,具体命令实现各种请求并将调用委派给业务逻辑对象,而接收者则包含部分业务逻辑,负责实际执行工作。客户端会
-
0命令模式是一种行为设计模式,能够将请求转化为包含所有相关信息的独立对象,实现方法的参数化、请求的延迟执行或排队,以及可撤销操作。 模式架构:发送者负责初始化请求并触发命令,命令接口声明执行命令的方法,具体命令实现各种请求并将调用委派给业务逻辑对象,而接收者则包含部分业务逻辑,负责实际执行工作。客户端会创建并配置具体命令对象。 命令模式的优点在于,它实现了单一职责原则,将触发和执行操作的类解耦;遵循开
-
0从用户操作这个功能开始深入设计了command模式的应用,Command设计模式是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求、队列或日志来参数化其他对象,并支持可撤销的操作。这个模式的主要目的是解耦请求的发送者和接收者,使得请求的发送者不需要关心具体的操作细节,而只需要调用命令对象的接口,具有很好的灵活性和可扩展性。它不仅支持操作的记录和撤销,还可以轻松地扩展新功能,非常适合需要处理复
-
0Strategy模式 关键:为策略和其环境设计足够通用的接口,不必为新算法而改动策略或环境 策略模式通常包括三个部分: 上下文(Context):持有一个策略的引用,供客户端调用。 策略接口(Strategy Interface):定义一个算法族的公共接口。 具体策略(Concrete Strategy):实现策略接口的不同算法。
-
0阅读第二章中2.7~2.9节感受: 主要介绍用户操作功能以及介绍设计command模式的应用 command模式:它是一种行为型设计模式,它的核心思想是将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化。对请求排队或记录,以及支持可撤销的操作。命令模式的主要目的是将发出请求的对象和执行请求的对象解耦。 命令(Command):这是一个接口,它声明了执行操作的方法。这个接口是所有具体命令类的基础,确保它们具有统一的执行方法
-
0创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 抽象工厂模式:创建一系列相关或相互依赖对象的接口,但无需指定他们的具体类。 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 工厂模式和抽象工厂模式都属于创建型设计模式,主要
-
1第九章主要讲了简化条件语句,使得程序逻辑更清晰,同时方便扩展。 作者介绍了几种方式: 1. 拆分变量:如果变量承担多个责任,它就应该被替换(分解)为多个变量,每个变量只承担一个责任。每次都在声明处对变量改名,并修改下次赋值之前的引用,直至到达最后一处赋值。 2. 字段改名:在对字段改名时,有4个地方需要留意:取值函数、设值函数、构造函数以及内部数据结构。 3. 以查询取代派生变量:尽量把可变数据的作用域限制在最小范
-
1在前边的章节主要是讲了函数和模块的重构,本章节的主题是重构API,将模块和函数串联。作者介绍了一些重构API的方式: 1、将查询函数和修改函数分离 将查询动作从修改动作中分离出来,使函数变得简单 2、函数参数化 两个函数逻辑非常相似,只有一些「字面量值」不同,可以将其合并成一个函数,以参数的形式传入不同的值,从而消除重复。 3、移除标记参数 针对参数的每一种可能值,新建一个明确函数。 4、保持对象完整 代码从一个记录结构
-
5第二章主要利用设计一个文档编辑器讲了几种设计模式。主要讲了单例模式、工厂模式、抽象工厂模式。 单例模式的特点就是一个类一个实例。工厂模式就是定义一个创建对象的接口,让子类自己实例化对象。抽象工厂模式就是提供一个创建相互依赖的对象接口。
-
0创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 创建型模式从对一组固定行为的硬编码转移为定义一个较小的基本行为集,这些行为可以被组合成任意数目的更复杂的行为。这样创建有特定行为的对象要求的不仅仅是实例化一个类。 创建型模型它们都将关于该系统使用哪些具体的类的信息封装起来;同时
-
01.拨打电话功能兼容所有平台,应用比较广泛,支持手机,座机。 使用uni.makePhoneCall可以实现拨打电话的功能 2.使用uni.scanCode可以调出客户端扫码界面,扫码成功后返回对应的结果。该功能不支持H5 平台,其他平台都支持。 3.使用uni.createAnimation创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 4.在js中定义 onPullDownRefresh处理函数(和onLoad等生命周期函数同级),监听该页面用
-
0拨打电话:uni.makePhoneCall调起客户端扫码界面:uni.scanCode创建一个动画:uni.createAnimation 创建实例 animation,性能高于css动画,可以完成一组动画。 duration 持续时间 timingFunction 效果 delay 动画延迟时间 transformOrigin 动画实例可以调用以下方法来描述动画,调用结束后会返回自身,支持链式调用的写法。var animation = uni.createAnimation({duration:1000,timingFunction:'ease',})比如:// 先放大同时旋转,然后平移animation.scale(2,2).rotate(45).step()this.animation.translate(100, 100).step
-
01.拨打电话功能兼容所有平台,应用比较广泛,支持手机,座机。 使用uni.makePhoneCall可以实现拨打电话的功能 2.使用uni.scanCode可以调出客户端扫码界面,扫码成功后返回对应的结果。该功能不支持H5 平台,其他平台都支持。 3.使用uni.createAnimation创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 4.在js中定义 onPullDownRefresh处理函数(和onLoad等生命周期函数同级),监听该页面用
-
2常用组件: view类似html中的div,但是有一些自己的事件属性,div的属性和事件需要用css、js编写 属性名 类型 默认值 说明 hover-class String none 指定按下去的样式类。当 hover-class="none" 时,没有单击态效果 hover-stop-propagation Boolean false 指定是否阻止本节点的祖先节点出现单击态,App、H5、支付宝小程序、百度小程序不支持 hover-start-time Number 50 按住后多久出现单击态,单位毫秒 hover-stay-time Number 400 手指松开后单击态保留时间,单位毫秒 使用div,编译
-
0拨打电话:uni.makePhoneCall 扫码:uni.scanCode(不支持h5) 动画:uni.createAnimation 下拉刷新:onPullDownRefresh(配置enablePullDownRefresh),uni.stopPullDownRefresh停止 登录:uni.login(比较复杂。百度小程序通过按钮,必须用户实际点击行为https://ku.baidu-int.com/knowledge/HFVrC7hq1Q/ddpRviE1Ce/BpoqkgQ) 微信支付:https://uniapp.dcloud.io/api/plugins/payment 节点信息:uni.createSelectorQuery()、query.select()、query.selectAll()、query.in(instance) 调试:uni.setEnableDebug
-
0uni.makePhoneCall可以拨打电话 uni.scanCode可以扫码 uni.createAnimation可以实现动画,按照书上所说,其性能高于CSS动画,API能力强大,并且通过js方式提供了回调,使用起来比较方便,但实际性能效果如何,需要在业务中验证下 onPullDownRefresh可以定义下拉刷新时的回调函数,不需要自己写下拉刷新事件的监听,uni.stopPullDownRefresh可以终止下拉刷新动画 uni.login可以实现登录,支持各个平台,但H5不支持 uni.getUserInfo可以获取用户信息 uni.requestPayment调起微信支付 uni
-
01.使用uni.makePhoneCall 拨打电话的功能 2.使用uni.scanCode可以调出客户端扫码界面,扫码成功后返回对应的结果。该功能不支持H5平台 3.使用uni.createAnimation创建一个动画实例 animation。调用实例的方法来描述动画,并可以传递给组件的animation属性。 4.在js中定义 onPullDownRefresh处理函数监听该页面用户下拉刷新事件。 使用onPullDownRefresh函数前,并需要在pages.json里,找到当前页面的pages节点,并在style选项中开启enablePullDownRefresh。 uni.stopPullDownRefresh 可以停止当前
-
01.拨打电话功能兼容所有平台,应用比较广泛,支持手机,座机。 使用uni.makePhoneCall可以实现拨打电话的功能 2.使用uni.scanCode可以调出客户端扫码界面,扫码成功后返回对应的结果。该功能不支持H5 平台,其他平台都支持。 3.使用uni.createAnimation创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 4.在js中定义 onPullDownRefresh处理函数(和onLoad等生命周期函数同级),监听该页面用
-
0
-
01.动画 队列调用动画操作方法后要调用step()来表示一组动画完成,可以在一组动画中调用任意多个动画方法,一组动画中的所有动画会同时开始,一组动画完成后才会进行下一组动画。step可以传入一个跟uni.createAnimation()一样的配置参数用于指定当前组动画的配置。 2.下拉刷新onPullDownRefresh 需要在pages.json里,找到的当前页面的pages节点,并在style选项中开启enablePullDownRefresh。 当处理完数据刷新后,uni.stopPullDownRefresh可以停止当前页面的下拉刷新。 uni.star
-
01. 拨打电话:使用uni.makePhoneCall()可以实现拨打电话的功能,兼容所有平台,支持手机和座机。 2. 扫码:uni.scanCode()可以调出客户端扫码界面,支持使用相机直接扫码和从相册中选择图片扫码。 3. 动画:uni.createAnimation()创建一个动画实例,通过调用实例的方法来描述动画,最后通过动画实例的export()导出动画数据,传递给组件的animation属性。 4. 下拉刷新:在pages.json文件中定义onPullDownRefresh()处理函数,使用之前在pages.json里找到当前页面的pages节点,并
-
6在我们日常开发中,设计原则是一种用来指导设计决策的方法,它帮助开发者构建出高效、可维护、可扩展、可复用的系统。这几章中主要介绍了5种原则: 1. 单一职责原则(Single Responsibility Principle,SRP):它指的是一个类应该只有一个改变的原因。也就是说,一个类应该只负责一个功能领域中的职责。如果一个类负责了多个领域的职责,那么它就可能在一个领域的变化影响到另一个领域,这将使得系统变得复杂且难以维护。遵循这个原则,可以提高
-
010.13拨打电话uni.makePhoneCall:实现拨打电话的功能。 10.14扫码uni.scanCode:支持使用相机直接扫码和从相册中选择图片进行扫码,也支持条形扫码。可以调出客户端扫码界面。成功后会返回result(扫码内容)、scanType(扫码类型)、chatSet(字符集)、path。 10.15动画uni.createAnimation:可以实现复杂的动画效果。使用 animation.export() 方法将动画数据导出,调用动画操作后要调用step()来表示一组动画完成。 10.16下拉刷新:onPullDownRefresh()处理函数,需要在pages.json
-
1以递归组合模式,实现文本基本元素的组织整合;以策略模式,实现对文档的格式化;以Decorator模式,实现对于文本编辑器用户界面修饰;抽象工厂模式,实现GUI的不同平台适配;Bridge模式实现依赖倒置不关心具体实现
-
0生命周期: 1.应用生命周期 主要是onLaunch、onShown、onHide三个生命周期钩子,在App.vue文件中监听。要想在onLaunch中进行页面跳转需要写在setTimeout中。 2.页面生命周期 写在pages文件夹下的文件中 常用的页面生命周期函数有: onLoad、onShow、onHide、onPullDownRefresh、onReachBottom 3.组件生命周期 写在components文件夹下的文件中,和vue标准组件生命周期相同 beforeCreate、Create、beforeMount、mounted、beforeupdate、updated、beforeDestroy、destroyed 尺寸单位、Flex布局与背景图片 uni-ap
-
0第二章以一个实际的应用:设计一个文档编辑器来讲解实际使用到的设计模式。设计包含以下几个部分: 文档结构: 文档的物理结构可以看成行、列、图形、表和其他子结构,可以由一系列元素组成,文本,图形等。 可使用组合模式来表示文档的层次结构,使得文本和图形可以统一处理。 格式化功能: 支持文档的格式化操作。 使用策略模式来完成,主要参与者是策略对象(封装了不同算法)和操作环境。关键点在于为策略和环境设计足够通用的的
-
0第二章主要是关于设计一个文档编辑器的实例研究。在这一章中,作者通过构建一个文档编辑器的过程,演示了如何应用各种设计模式来解决复杂的软件设计问题。 1、主要内容总结: 文档编辑器的设计目标: 文档编辑器需要支持多种文档格式(如文本、图像等)。 需要支持复杂的用户界面元素,例如菜单、工具栏和状态栏。 需要具备扩展性,以便于未来添加新功能。 2、架构设计: 通过将文档、视图和控制器分离来实现灵活的架构设计,这对应于
-
0一、重点总结 1. **文档编辑器的设计目标**: - 构建一个灵活、可扩展的文档编辑器。 - 支持多种文档格式和多种视图。 2. **面向对象设计原则的应用**: - 使用面向对象的设计原则,如单一职责原则、开闭原则、依赖倒置原则等。 3. **关键设计模式的应用**: - **Composite 模式**:用于表示文档的层次结构(如章节、段落、文本)。 - **Strategy 模式**:用于实现不同的排版和格式化算法。 - **Decorator 模式**:用于动态地为对象添加职责,比如装饰文本(加
-
0本章主要通过一个文档编辑器的设计,介绍了什么情况下选择什么设计模式 1、组合模式,用来表示文档复杂、层次式的结构(比如图片、字符、是否可见等) 2、策略模式,关键点在于为策略类和它的使用环境设计足够通用的接口,用于支持一系列的算法 3、抽象工厂模式,主要介绍怎么在不直接实例化类的情况下创建一系列相关的产品对象。比较适合产品对象的数目和种类不变,而具体产品系列之间存在不同的情况 4、桥接模式,目的是允许分类的