1.点缀器商业模式
1.1.扩充第一类的犯罪行为,而无须修正第一类的类
1.2.点缀的第一类能继续执行其原初同时实现没提供更多的机能
1.3.竞争优势
1.3.1.全力支持单个职能准则1.3.1.1.每一类只如果分担一类职能
1.4.经典之作实现
1.4.1.三个IComponentUSB1.4.2.三个具体内容同时实现,即ConcreteComponent1.4.3.选用附加犯罪行为来进一步增强IComponent的Decorator1.4.3.1.比如:加进单例犯罪行为1.4.4.特征1.4.4.1.三个USB1.4.4.1.1.USB新闻稿了数个方式,就难以选用三个表达式类别来代替USB1.4.4.2.三个类1.4.4.3.每一类三个方式1.4.4.3.1.具体内容操作1.4.4.3.2.点缀器
1.5.表达式点缀器
1.5.1.USB改成三个表达式类别1.5.1.1.实例:该类别的表达式不拒绝接受std,回到三个Widget:()=> Widget1.5.2.三个具体内容同时实现的类代替为单纯表达式1.5.3.三个新表达式singletonDecorator()1.5.3.1.拒绝接受三个WidgetFactory类别的表达式1.5.3.2.回到除此之外三个WidgetFactory类别的表达式1.5.3.3.选用lambda同时实现1.5.4.特征1.5.4.1.三个表达式类别1.5.4.1.1.厂房表达式类别1.5.4.2.三个表达式1.5.4.2.1.厂房表达式1.5.4.2.2.点缀器表达式
1.6.旋量群
1.6.1. lambda捕捉1.6.1.1. lambda内捕捉的三个内部表达式1.6.2.C语言透过旋量群来同时实现lambda捕捉1.6.3.旋量群历史记录了建立该表达式时的自然环境1.6.3.1.能在相同初始化间保护状况1.6.4. lambda提及了表达式的回到值1.6.4.1.其存活期将小于建立它的表达式1.6.4.2.表达式的回到值在初始化表达式时建立,在表达式回到时封存1.6.5.留存了其内层表达式的许多状态重要信息的lambda1.6.6.多于存有低阶表达式,旋量群才有意义1.6.6.1.不能从三个表达式中回到另三个表达式,就不存有要捕捉的自然环境1.6.6.2.所有表达式都在全局作用域内,所以全局作用域就是它们的自然环境1.6.6.2.1.表达式只能提及全局表达式1.6.7.第一类代表一组方式的某个状况1.6.8.旋量群则代表捕捉到某个状况的表达式
2.计数器
2.1.全局计数器
2.1.1.三个提及全局表达式的单纯表达式2.1.2.缺点2.1.2.1.计数器的值没被恰当封装2.1.2.2.不能选用计数器的三个独立的实例
2.2.面向第一类的计数器
2.2.1.数个独立的计数器
2.3.表达式式计数器
2.3.1.代码比面向第一类版本的更加简洁
2.4.可恢复的计数器
2.4.1.可恢复的表达式2.4.1.1.跟踪自己状况的表达式,在被初始化时,不会从头运行,而是从上一次回到时所在的状况恢复继续执行2.4.2.不选用关键字return来退出表达式2.4.3.选用关键字yield2.4.3.1.必须把表达式新闻稿为三个生成器2.4.3.2.其回到类别必须是可迭代的迭代器2.4.3.3.在表达式名称的前面加上星号来新闻稿生成器2.4.4. TypeScript语法2.4.5.生成器透过特殊语法来建立可恢复的表达式2.4.6.生成器不是回到控制权,而是交出控制权
3.异步
3.1.按顺序运行代码可能导致不可拒绝接受的延迟
3.2.回调
3.2.1.作为std提供更多给异步表达式的三个表达式3.2.2.也能从异步表达式那里收到std
3.3.异步继续执行模型
3.3.1.线程3.3.2.事件循环3.3.2.1.选用三个队列3.3.2.2.异步表达式将被加入队列3.3.2.3.它们自己也能将其他表达式排队3.3.2.4.只要队列不为空,队列中的第三个表达式就将被取出来继续执行3.3.2.5.优点3.3.2.5.1. I/O操作等待数据时让它们排队的效果很好3.3.2.5.2.不需要同步,因为所有代码在三个线程上运行3.3.2.6.缺点3.3.2.6.1.对于运行时间长,但是不能被拆分为数个操作的任务,效果不好3.3.2.6.2. CPU密集的操作会造成阻塞3.3.2.6.2.1. CPU密集的操作(如复杂计算)不能被排队3.3.2.6.2.2.需要CPU周期3.3.2.6.2.3.没等待数据
3.4.简化异步代码
3.4.1. promise3.4.1.1.将来某个时刻可用的值的三个代理3.4.1.2.在生成该值的代码运行之前,其他代码能选用该promise设置在该值可用后如何处理该值,在发生错误时如何处理,甚至取消将来的继续执行3.4.1.3.让代码的可读性相比选用回调时更好3.4.1.4.状况3.4.1.4.1.等待(pending)3.4.1.4.1.1.已被建立,但还没完成3.4.1.4.2.完成(settled)3.4.1.4.2.1.已经初始化了,并提供更多了三个值,此时将初始化continuation3.4.1.4.3.拒绝(rejected)3.4.1.4.3.1.初始化reject()或者抛出错误
3.4.1.4.3.1.1.当前的promise会被拒绝
3.4.1.4.3.1.2.透过then()链接到该promise的其他所有promise都会被拒绝
3.4.1.5.组合promise3.4.1.5.1. Promise.all()3.4.1.5.1.1.一组promise作为std3.4.1.5.1.2.回到当提供更多的所有promise都完成后完成的三个promise3.4.1.5.2. Promise.race()3.4.1.5.2.1.一组promise作为std3.4.1.5.2.2.回到当提供更多的任何三个promise完成时完成的三个promise
3.4.2. continuation3.4.2.1.在promise的结果可用后初始化的表达式3.4.2.2.并非必须回到三个promise3.4.2.2.1.不是总会链接异步表达式3.4.2.2.2.能同步继续执行3.4.2.2.3.自动转换为Promise<T>3.4.2.3.每一continuation放到三个单独的表达式中,并透过then()把它们链接起来3.4.3.表达式promise提供更多给我们某个类别T的值,以及指定从T到其他某个类别U的表达式((value: T)=> U)的能力,当承诺被履行,我们得到了值以后,将初始化这个表达式(它就是continuation)3.4.4. JavaScript(及TypeScript)选用Promise<T>类别同时实现3.4.5. C#选用Task<T>同时实现3.4.6. JAVA选用CompletableFuture<T>同时实现3.4.7. async/await3.4.7.1.代码的可读性更好3.4.7.1.1.异步代码读起来类似于同步代码3.4.7.2.把所有代码写到三个表达式中,每当初始化除此之外三个回到promise的表达式,就等待(await)其结果,然后在得到结果后继续继续执行3.4.7.3.异常将从await初始化抛出,可在try/catch语句中捕捉3.4.7.4.不选用then()提供更多continuation3.4.7.5.语法糖