![](https://img-blog.csdnimg.cn/direct/6f323e53dbcd43a38c305e5663e95f66.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
阿库娅看了都能会的设计模式
文章平均质量分 57
用人话介绍设计模式
TakiLove
长期素食导致的
展开
-
阿库娅看了都能会的设计模式:用现实模型一步步解释结构型模型-装饰模式
而这三项技能也需要分别拥有自己的个性化方法,即doHouseWork()、playGenshin()和fly(),其中“飞”这个技能还需要有一对翅膀,所以要在FlyNekoDeractor类里加入新属性Wing。这里要注意一点:我们只是对原有的Neko类进行装饰,根据开闭原则是不能改变被修饰的Neko类原本的样子的。但是我们还希望得到含有Neko类本来信息的实例对象,所以要把Neko类的实例加入到NekoDerator类的属性之中,并在所有的Deractor类中使用Neko类进行自身构造。原创 2024-05-28 20:37:14 · 367 阅读 · 0 评论 -
阿库娅看了都能会的设计模式:用现实模型一步步解释结构型模型-适配器模式
我们在NekoMusume类派生出一个适配器类ChangeToNeko类,该类能够和Cat类组合,利用changeToMusume()方法将传入的Cat类实例中的catBody属性和人的属性结合,进行适当的转换,做出一个猫娘来,返回给我。通过之前介绍的创建型模型,我已经生成出了一大堆猫猫。我们在外面给手机充电,肯定得自带充电器,让充电头中的变压器从220V降为手机需要的电压,这个充电器肯定得你自己带,没见过哪个插座上自己带充电器的:即。我现在只有现成的猫猫类,但是返回的catBody并不是我想要的;原创 2024-05-28 19:27:51 · 372 阅读 · 0 评论 -
阿库娅看了都能会的设计模式:用现实模型一步步解释创建型模型-生成器模式
当然,这两个子类在覆写Builder中的setter外,也要根据实际所建造的产品的性质拥有自己单独的方法,QQ牧场建造者的个性方法即是根据获取的数据去注册账号,而真实牧场建造者个性方法则是选块地皮建房子。而谁来决定具体牧场里面要养什么动物呢?但是人家是真的动物朋友,我这全是赛博动物朋友,人家要的是真牧场,我这是QQ牧场。然后BuilderX将这份“属性清单”上的属性值“记忆”到自己的变量表中,然后通过从Builder那继承来的构建方法与自己个性化的构建函数构建出自家该制作的目标产品,把产品给客户端。原创 2024-05-28 19:06:29 · 217 阅读 · 0 评论 -
阿库娅看了都能会的设计模式:用现实模型一步步解释创建型模型-工厂方法模式
另外,如果我原来喂的是Dog,现在想要更改我喂的宠物为Rabbit,我只需要在创建宠物处将创建用工厂从MeatPetFactory改为GrassPetFactory即可,无需更改源代码的逻辑,客户端调用的依旧是PetFactory.getPet()和Pet.eat()。然而,当我以后想要养一只仓鼠时,就需要再在主函数的switch中加入仓鼠的case,这就更改了原来的代码,违背了开闭原则(改动已有代码的结构哒咩)。如上图,我们在不更改原来代码结构的前提下轻松地实现了对源代码的扩展。原创 2024-05-28 15:28:59 · 571 阅读 · 0 评论 -
阿库娅看了都能会的设计模式:用现实模型一步步解释创建型模型-抽象工厂模式
然后我们决定要产生哪种问题。因为我们要分别选择四脚动物和两脚动物,于是我们在接口ProblemFactory中给出选择两脚动物和四脚动物的虚接口,让它的具体子类(即出题的工厂类)去实现。但是单纯的鸡兔大伙都要看吐了,所以我创新一下,加几种同样是两条腿和四条腿的动物。但是问题来了,这俩元素能构成2*2=4种问题,根据之前构造工厂的方法,我每出一道题,就要生产一只四脚动物和一只两脚动物,最终要进行8次构建,太浪费空间了,而且代码也很繁杂。我很生气,便找了一只狗,把这个嘲讽我的学生和狗放在了一个笼子里。原创 2024-05-28 18:21:07 · 194 阅读 · 0 评论