- 博客(31)
- 资源 (4)
- 问答 (3)
- 收藏
- 关注
原创 大话设计模式读书笔记——访问者模式
很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。反之,如果这样的系统的数据结构对象易于变化,经常要有新的数据对象增加进来,就不适合使用访问者模式。ObjectStructure类:能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素。
2023-06-16 18:48:10
213
原创 大话设计模式读书笔记——解释器模式
例如上海滩的歌曲第一句,‘浪奔’,可以写成’O 2 E 0.5 G 0.5 A 3’表示中音开始,演奏的是mi so la。、Rn中各个符号的实例变量。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。AbstractExpression(抽象表达式),声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
2023-06-16 16:56:58
216
原创 大话设计模式读书笔记——享元模式
首先这些企业客户,他们需要的网站结构相似度很高,而且都不是那种高访问量的网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多,这造成服务器的大量资源浪费,当然更实际的其实就是钞票的浪费,如果整合到一个网站中,共享其相关的代码和数据,那么对于硬盘、内存、CPU、数据库空间等服务器资源都可以达成共享,减少服务器资源,而对于代码,由于是一份实例,维护和扩展都更加容易。在享元对象内部并且不会随环境改变而改变的共享部分,可以称为享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态了。
2023-06-16 12:10:04
116
原创 大话设计模式读书笔记——中介者模式
由于有了Mediator,使得ConcreteColleague1和ConcreteColleague2在发送消息和接收信息时其实是通过中介者来完成的,这就减少了它们之间的耦合度。Colleague叫作抽象同事类,而ConcreteColleague是具体同事类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但他们却都认识中介者对象。ConcreteMediator是具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。
2023-06-15 12:17:55
119
原创 大话设计模式读书笔记——职责链模式
假如你想申请加工资,需要向上级部门申请。如你先向经理申请,经理没权利,然后向总监上报,总监也没权。注意:,一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。ConcreteHandler类,具体处理者类,处理它所负责的请求,,如果可处理该请求,就处理之,否则就将该请求转发给它的后继者。限,最后向总经理上报。将这段场景用代码实现。Handler类,定义一个处理请示的接口。
2023-06-15 11:13:08
143
原创 大话设计模式读书笔记——组合模式
也就是Leaf类当中不用add和remove方法,那么就需要安全方式,也就是在Component接口中不去声明add和remove方法,那么子类的Leaf也就不需要去实现它,而是在。Composite中声明所有用来管理子类对象的方法,这样做就不会出现刚才提到的问题,不过由于不够透明,所以树叶和树枝类将不具有相同的接口,客户端的调用需要做相应的判断,带来了不便。需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式。
2023-05-24 11:41:52
233
原创 大话设计模式读书笔记——备忘录模式
请用代码实现以下场景:=一个游戏里面的角色有生命力、攻击力、防御力等数据,在打Boss前和后一定会不一样的,我们允许玩家如果感觉与Boss决斗的效果不理想可以让游戏恢复到决斗前。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。角色状态需要完整存储到备忘录对象中,如果状态数据很大很多,那么在资源消耗上,备忘录对象会非常耗内存。负责创建一个备忘录Memento,用以。
2023-05-20 13:45:45
206
原创 大话设计模式读书笔记——适配器模式
一个球员在NBA打球,如果不懂外语,又没有翻译,球技再高,估计也是不可能在国外待很长时间的。因此,一个外籍球员往往需要一个翻译来进行团队沟通,进行适应。请通过代码实现上面的场景。适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,并且在双方都不太容易修改的时候再考虑用适配器模式。
2023-05-17 09:51:39
133
原创 大话设计模式读书笔记——状态模式
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。一个员工上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬。ConcreteState类,具体状态,每一个子类实现一个与Context的一个状态相关的行为。Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态。State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。,就可以考虑使用状态模式了。
2023-05-16 16:53:51
155
原创 大话设计模式读书笔记——观察者模式
正好,Java已经为观察者模式准备好了相关的接口和抽象类了 有 了 这 些 Java 内 置 代 码 的 支 持 , 你 只 需 要 扩 展 或 继 承Observable,并告诉它什么时候应该通知观察者,就OK了,剩下的事Java会帮你做。具体的通知者类可能是前台秘书,也可能是老板,它们也许有各自的一些方法,但对于通知者来说,它们是一样的,所以它们都去继承这个抽象类Subject。Observer类,抽象观察者,为所有的具体观察者定义一个接口,在。抽象通知者,可以是接口,也可以是抽象类。
2023-05-13 12:40:58
153
原创 大话设计模式读书笔记——建造者模式
用程序画一个小人,要求是小人要有头、身体、两手、两脚。输出结果:再画一个身体比较胖的小人。画人的时候,头身手脚是必不可少的,开发时也是不能少。因此,可以建两个类,一个是瘦人的类,一个是胖人的类。客户端弊端比如现在再增加需求:加一个高个的小人。你会不会因为编程不注意,让他缺胳膊少腿呢?因此最好的办法是规定,凡是建造小人,都必须要有头和身体,以及两手两脚。如果你需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用于一个设计模式,建造者模式(Builde
2023-05-10 12:15:50
186
原创 大话设计模式读书笔记——外观模式
这样的写法,基本就是外观模式的基本代码结构了。外观模式(Facade),为子系统中的一组接口提供一个。,这个接口使得这一子系统更加容易使用。需求变更:现在增加一个基金类。设计一个股民炒股票的代码。
2023-05-04 19:59:38
90
原创 大话设计模式读书笔记——模板方法模式
这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。模板方法(Template Method)模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。在这里应该就是把试题和答案分享,抽象出一个父类,让两个子类继承于它,公共的试题代码写到父类当中。当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。仔细观察学生子类代码,除了选项的abcd,其他都是重复的。
2023-05-02 22:25:04
169
原创 大话设计模式读书笔记——原型模式
原型模式的使用,不用重新初始化对象,而是动态地获得对象运行时的状态。这既隐藏了对象创建的细节,又对性能是大大的提高。
2023-05-02 21:27:24
219
原创 大话设计模式读书笔记——工厂方法模式
在简单工厂模式读书笔记中,介绍了用简单工厂模式实现一个简易计算器功能,在本章,我们将介绍一种新的设计模式——工厂方法模式,去实现计算器功能工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。对于复杂的参数的构造对象,可以很好地对外层屏蔽代码的复杂性。很好的解耦能力。
2023-05-01 23:26:17
237
原创 大话设计模式读书笔记——代理模式
代理类,是唯一既认识追求者,又认识被追求者的类,在初始化的过程中,建立了追求者与被追求者的关联,并在实现自己的接口方法时,调用了追求者的同名方法。ISubject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。但代理在被客户端调用自己的接口方法时,本质是调用了追求者同名方法。RealSubject类,定义Proxy所代表的真实实体。的接口相同的方法,这样代理就可以用来替代实体。追求者类只是增加了实现送礼物的接口一处改动。
2023-04-25 13:03:23
110
原创 大话设计模式读书笔记——装饰模式
装饰模式是为已有功能动态地添加更多功能的一种方式。当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为,这就会增加原有代码的复杂度。因此我们需要使用装饰模式它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了。
2023-04-24 17:48:11
366
原创 大话设计模式读书笔记——策略模式
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。
2023-04-23 12:06:04
324
原创 redis.windows-service.conf和redis.windows.conf的区别
windows系统下运行redis时加载不同的配置文件
2022-09-07 16:30:40
3907
原创 自我学习记录———完全背包问题
完全背包问题【问题描述】设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。【输入】第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2…N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。【输入样例】10 42 13 34 57 9【输出样例】max=12【关于01背包和完全背包的不同——以打表为例】
2021-12-25 21:01:06
614
原创 自我学习记录——01背包问题
问题代码1(二维数组)#include <iostream>#include<string>using namespace std;int dp[35][205];int w[35], c[35];int main() { int m, n; cin >> m >> n; for (int i = 1;i <= n;i++) { cin >> w[i] >> c[i];
2021-12-22 20:09:06
508
原创 剑指 Offer 30. 包含min函数的栈
包含min函数的栈题目要求:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。思路该题需要用到两个栈,一个作为主栈,一个作为辅助栈,每次元素进主栈时先判断元素是否小于辅助栈栈顶元素或是辅助栈元素为空,判断为真的话元素一同进辅助栈。代码如下class MinStack { stack <int> S; stack <int> Min;public: /**
2021-08-11 23:30:33
83
原创 剑指 Offer 09. 用两个栈实现队列
用两个栈实现队列思路栈的原理是先进后出,队列的原理是先进先出.那么题目给出了2个栈,思路是将元素先压入栈1,再将栈1的元素压入栈2,此时栈2出栈的元素顺序就相当于原来元素的先进先出。话不多说,直接贴代码(c++)!class CQueue {public: stack<int> stk; stack<int> stkhp; CQueue() { } void appendTail(int value) { stk.p
2021-08-10 19:54:56
68
原创 c# BigInteger.Parse和java new BigInteger的一些小问题
背景:最近在做一个c#转java的项目在讲我的需求之前,先来介绍一下标题中的两个方法c#: BigInteger.Parse 方法 定义:将数字的字符串表示形式转换为它的等效 BigInteger 表示形式。命名空间:System.Numerics程序集:System.Runtime.Numerics.dll我用到的一个重载的方法:Parse(String, NumberStyles)定义:将指定样式的数字的字符串表示形式转换为它的等效 BigInteger。java: new
2021-05-23 10:50:22
698
原创 关于今天学习docker遇到了一个小bug
关于今天学习docker遇到了一个小bug我用的是腾讯云的一个轻量级服务器,之前搭建了mysql的环境(占用3306端口)。然而今天学习docker的时候也搭建了mysql的镜像(占用3306端口)。然后在自己的sqlyog尝试连接的时候会一直连接不上。其实问题也显而易见了,就是服务器本身的mysql环境占用了端口号导致连接失败。...
2021-03-20 16:26:54
103
u-modal模态框里下拉框内容显示不完整
2024-09-27
uni-app 如何设置 怎么设置 easyinput只读 readonly
2024-04-29
uni-app 如何设置 怎么设置 input 设置只读 readonly
2024-04-29
netframework4.8的环境下如何使用unipush推送消息
2024-04-26
asp.net web应用程序如何使用websocket
2024-04-24
可以通过IP地址访问到共享打印机,如何通过c#代码搭建一个打印服务
2024-02-28
C# Webserice接口里使用异步方法都会报异常,如何解决?
2024-01-24
目前可以通过ip地址访问到所有的打印机,如何在本地通过C#代码实现远程打印?
2024-01-23
假如这是某张表的两个字段,如何根据字段new = A的条件获取所有的记录
2024-01-22
C#的类库代码的实现应该在哪查看
2023-08-08
为XV6建立信号量机制以实现父子进程间的互斥与同步
2023-03-20
wireshark软件过滤arp数据报的问题
2021-12-05
求数据挖掘、推荐算法的学习路线
2021-07-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人