练习02创建型+结构型+其它(以fromsrc目录中的代码为基础)1.在game中维护着curMenu,见下图:在运行时,应只有一个curMenu对象。
而MenuMgr作为所有menu的管理器,也可以管理curMenu。
请将curMenu从Game类,移到MenuMgr中,使得运行结果不变。
2.道理同1.请建立MapMgr类,并将curMap从Game类,移到MapMgr中,使得运行结果不变。
3.查看Map.h其中各Block以二维数组的方式组织。
事实上,各Block的组织方式是多种多样的,如既可以用二维数组的方式表示布局结构,也可以用链表、有向图等表示,甚至各Block是通过立体的关系构成Map。
请使用桥接模式分离Map的接口和具体实现。
同时,为保持Map接口的一般性,改为通过线性索引的方式读取/添加Block。
即Map可如下:MapImp类可如下:(当需要不同的实现时,从MapImp派生即可)既然Map不再记录Block的二维位置信息,那么可以让Block记录自己的二维位置信息,即Block类可修改为:请完成相关代码的修改,使得程序功能不变。
4.前边的代码中,地图的布局是由二维数组给出的,如:很明显,其隐含地指出:相邻的两个非空Block是相通的,不相邻两个非空Block是不能直接连通的。
但实际上,地图的布局不一定以数组方式给出,可以用其它方式给出,例如下图(地图B)中的布局,可能以下表的方式给出:(地图B的布局含义)AAAAABBBCCCCDDDAAAAABBB(对应地图B布局实际给出的数据表)类型序号行列LEFTRIGHTUPDOWNA1000206A2011300A3022407A4033500A5044008B6100019B71200310B81400512C92000613C1022011714C1123101200C1224110815D133000916D1432001018D1534001220A1640017130A1741161800A18421719140A1943182000A20441921150B2145202200B2246212300B234722000若希望每个Block“知道”其相邻的各Block,请扩展3中MapDirector、MapBuilder、Block类,同时改写MapMgr中的createMap函数,使得新的程序能够根据给定数据表正确创建并显示地图(可在global.h中添加常量)。
5.回看3中的MapImp类:请问“MapImp类的设计中,使用了适配器模式”,这句话对吗?如果正确,回答适配了什么?采用类适配器模式可以吗?如果不正确,回答为什么?
2022/9/30 20:10:21 632KB 吉林大学 设计模式
1
精通并发与netty视频教程(2018)视频教程。
精通并发与netty视频教程(2018)视频教程netty视频教程Java视频教程目录:1_学习的要义2_Netty宏观理解3_Netty课程大纲深度解读4_项目环境搭建与Gradle配置5_Netty执行流程分析与重要组件介绍6_Netty回调与Channel执行流程分析7_Netty的Socket编程详解8_Netty多客户端连接与通信9_Netty读写检测机制与长连接要素10_Netty对WebSocket的支援11_Netty实现服务器端与客户端的长连接通信12_GoogleProtobuf详解13_定义Protobuf文件及消息详解14_Protobuf完整实例详解15_Protobuf集成Netty与多协议消息传递16_Protobuf多协议消息支援与工程最佳实践17_Protobuf使用最佳实践与ApacheThrift介绍18_ApacheThrift应用详解与实例剖析19_ApacheThrift原理与架构解析20_通过ApacheThrift实现Java与Python的RPC调用21_gRPC深入详解22_gRPC实践23_GradleWrapper在Gradle项目构建中的最佳实践24_gRPC整合Gradle与代码生成25_gRPC通信示例与JVM回调钩子26_gRPC服务器流式调用实现27_gRPC双向流式数据通信详解28_gRPC与Gradle流畅整合及问题处理的完整过程与思考29_Gradle插件问题处理方案与Nodejs环境搭建30_通过gRPC实现Java与Nodejs异构平台的RPC调用31_gRPC在Nodejs领域中的静态代码生成及与Java之间的RPC通信32_IO体系架构系统回顾与装饰模式的具体应用33_JavaNIO深入详解与体系分析34_Buffer中各重要状态属性的含义与关系图解35_JavaNIO核心类源码解读与分析36_文件通道用法详解37_Buffer深入详解38_NIO堆外内存与零拷贝深入讲解39_NIO中Scattering与Gathering深度解析40_Selector源码深入分析41_NIO网络访问模式分析42_NIO网络编程实例剖析43_NIO网络编程深度解析44_NIO网络客户端编写详解45_深入探索Java字符集编解码46_字符集编解码全方位解析47_Netty服务器与客户端编码模式回顾及源码分析准备48_Netty与NIO系统总结及NIO与Netty之间的关联关系分析49_零拷贝深入剖析及用户空间与内核空间切换方式50_零拷贝实例深度剖析51_NIO零拷贝彻底分析与Gather操作在零拷贝中的作用详解52_NioEventLoopGroup源码分析与线程数设定53_Netty对Executor的实现机制源码分析54_Netty服务端初始化过程与反射在其中的应用分析55_Netty提供的Future与ChannelFuture优势分析与源码讲解56_Netty服务器地址绑定底层源码分析57_Reactor模式透彻理解及其在Netty中的应用58_Reactor模式与Netty之间的关系详解59_Acceptor与Dispatcher角色分析60_Netty的自适应缓冲区分配策略与堆外内存创建方式61_Reactor模式5大角色彻底分析62_Reactor模式组件调用关系全景分析63_Reactor模式与Netty组件对比及Acceptor组件的作用分析64_Channel与ChannelPipeline关联关系及模式运用65_ChannelPipeline创建时机与高级拦截过滤器模式的运用66_Netty常量池实现及ChannelOption与Attribute作用分析67_Channel与ChannelHandler及ChannelHandlerContext之间的关系分析68_Netty核心四大组件关系与构建方式深度解读69_Netty初始化流程总结及Channel与ChannelHandlerContext作用域分析70_Channel注册流程深度解读71_Channel选择器工厂与轮询算法及注册底层实现72_Netty线程模型深度解读与架构设计原则73_Netty底层架构系统总结与应用实践74_Netty对于异步读写操作的架构思想与观察者模式的重要应用75_适配器模式与模板方法模式在入站处理器中的应用76_Netty项目开发过程中常见且重要事项分析77_JavaNIOBuffer总结回顾与难点拓展78_Netty数
2018/11/3 6:48:04 108KB 精通并发 netty 视频教程 高并发
1
书籍目录目录第1章基本概念11.1什么是设计模式21.2设计模式的作用31.3GRASP模式的分类41.4GoF设计模式的分类41.5模式的学习阶段6第2章担任任地设计对象——GRASP92.1InformationExpert(信息专家)112.2Creator(创造者)132.3LowCoupling(低耦合)142.4HighCohesion(高内聚)152.5Controller(控制器)172.6Polymorphism(多态)182.7PureFabrication(纯虚构)192.8Indirection(间接)202.9ProtectedVariations(受保护变化)21第3章GoF-CreationalDesignPatterns创建型设计模式233.1SimpleFactoryPattern(简单工厂模式)243.1.1定义243.1.2现实例子——国旗生产厂263.1.3C#实例1——电子付款系统263.1.4C#实例2——学校登录系统293.1.5Java实例——手机简单工厂323.1.6优势和缺陷343.1.7应用情景343.2FactoryMethodPattern(工厂方法模式)353.2.1定义353.2.2现实例子——兵工厂363.2.3C#实例——多文档系统373.2.4Java实例——扩展了的手机工厂413.2.5优势和缺陷443.2.6应用情景443.3AbstractFactoryPattern(抽象工厂模式)453.3.1定义453.3.2现实例子——扩展了的兵工厂483.3.3C#实例——大陆生态系统493.3.4Java实例——电脑产品523.3.5优势和缺陷573.3.6应用情景573.4BuilderPattern(建造者模式)583.4.1定义583.4.2现实例子——快餐店603.4.3C#实例——车间造车613.4.4Java实例——建造房屋653.4.5优势和缺陷693.4.6应用情景703.5PrototypePattern(原型模式)703.5.1定义703.5.2现实中的拷贝-粘贴713.5.3C#实例——颜色管理器723.5.4Java实例——简单ToolBar743.5.5ShallowCopy与DeepCopy763.5.6优势和缺陷823.5.7应用情景823.6SingletonPattern(单例模式)823.6.1定义823.6.2现?抵械牡ダ??猈indowsTaskManager833.6.3C#实例——负载均衡控制器843.6.4Java实例——系统日志863.6.5DoubleCheckLocking(双检锁)893.6.6优势和缺陷933.6.7应用情景93第4章GoF-StructuralDesignPatterns结构型设计模式954.1AdapterPattern(适配器模式)964.1.1定义964.1.2现实中的实例——电脑电源适配器974.1.3C#实例——化学数据银行984.1.4Java实例——清洁系统1024.1.5优势和缺陷1044.1.6应用情景1044.2BridgePattern(桥接模式)1044.2.1定义1044.2.2现实中的实例——男人的约会1064.2.3C#实例——商业对象与数据对象1074.2.4Java实例——不同系统的图像处理1124.2.5优势和缺陷1144.2.6应用情景1154.3CompositePattern(组合模式)1154.3.1定义1154.3.2组合模式的现实应用——资源管理器1174.3.3C#实例——图形树状对象结构1184.3.4Java实例——文档格式化1214.3.5优势和缺陷1244.3.6应用情景1254.4DecoratorPattern(装饰模式)1254.4.1定义1254.4.2现实中的装饰模式——相架1264.4.3C#实例——图书馆中的项目1274.4.4Java实例——自定义JButton1314.4.5优势和缺陷1334.4.6应用情景1344.5FacadePattern(外观模式)1344
2020/1/13 6:24:51 1.21MB 设计 模式 设计模式 设计模式之禅
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡