喵星之旅沉睡的猫咪工厂类型设计模式喵星兔

创建一个工厂类,里面写方法负责创建对象。提供创建实例的功能,而无需关心具体实现。锅是由调用者和工厂一起负责的。

由于如果创建一个对象,不单是工厂类内部的问题,调用者往里面传入信息了,所以一旦出现问题是双方的问题。他解耦的结果是虽然锅没彻底甩出去,但是找了一个一起背锅的。

类关系图如下:

产品接口:

packagecreate.simplefactory;publicinterfaceFood{publicvoidcook();}具体产品1:

packagecreate.simplefactory;publicclassJiucaijidanimplementsFood{publicvoidcook(){System.out.println("韭菜鸡蛋做好了");}}具体产品2:

packagecreate.simplefactory;publicclassXihongshijidanimplementsFood{publicvoidcook(){System.out.println("西红柿鸡蛋做好了");}}工厂类:

packagecreate.simplefactory;publicclassFoodFactory{publicFoodcreateByName(Stringname){if("Jiucaijidan".equals(name)){returnnewJiucaijidan();}elseif("Xihongshijidan".equals(name)){returnnewXihongshijidan();}returnnull;}publicFoodcreateByClassname(Stringname){try{if(name!=null&&!"".equals(name)){return(Food)Class.forName(name).newInstance();}}catch(Exceptione){e.printStackTrace();}returnnull;}publicFoodcreateByClass(Classclazz){try{if(clazz!=null){returnclazz.newInstance();}}catch(Exceptione){e.printStackTrace();}returnnull;}}测试类:

packagecreate.simplefactory;publicclassTest{publicstaticvoidmain(String[]args){Foodf1=newFoodFactory().createByName("Jiucaijidan");f1.cook();Foodf2=newFoodFactory().createByClassname("create.simplefactory.Xihongshijidan");f2.cook();Foodf3=newFoodFactory().createByClass(Xihongshijidan.class);f3.cook();}}

二、工厂模式

关系图如下:

packagecreate.factory;publicinterfaceFood{publicvoidcook();}具体产品1:

packagecreate.factory;publicclassJiucaijidanimplementsFood{publicvoidcook(){System.out.println("韭菜鸡蛋做好了");}}具体产品2:

packagecreate.factory;publicclassXihongshijidanimplementsFood{publicvoidcook(){System.out.println("西红柿鸡蛋做好了");}}工厂接口:

packagecreate.factory;publicinterfaceFoodFactory{publicFoodcreate();}具体工厂1:

packagecreate.factory;publicclassJiucaiFactoryimplementsFoodFactory{publicFoodcreate(){returnnewJiucaijidan();}}具体工厂2:

packagecreate.factory;publicclassXihongshiFactoryimplementsFoodFactory{publicFoodcreate(){returnnewXihongshijidan();}}测试类:

packagecreate.factory;publicclassTest{publicstaticvoidmain(String[]args){FoodFactoryff1=newXihongshiFactory();FoodFactoryff2=newJiucaiFactory();Foodf1=ff1.create();Foodf2=ff2.create();f1.cook();f2.cook();}}

三、抽象工厂模式

考虑工厂的出现,将里面的简单工厂用工厂替换,就是抽象工厂。而且可以出现多级抽象工厂。

如果工厂进行背锅,里面有一些质量好的工厂就会有意见,所以内部分裂了,内部进行甩锅,就是抽象工厂。工厂总接口越稳定、内部背锅规则越详细,那么甩锅的设计就更完善、这个抽象工厂越成功。

关系图如下(只是其中一种展现方式):

具体产品1:

packagecreate.abstractfactory;publicclassXiangyouJiucaijidanimplementsCondiment,Food{@Overridepublicvoidadd(){System.out.println("添加香油的");}@Overridepublicvoidcook(){System.out.println("韭菜鸡蛋做好了");}}具体产品2:

packagecreate.abstractfactory;publicclassXiangyouXihongshijidanimplementsCondiment,Food{@Overridepublicvoidadd(){System.out.println("添加香油的");}@Overridepublicvoidcook(){System.out.println("西红柿鸡蛋。");}}具体产品3:

packagecreate.abstractfactory;publicclassJijingJiucaijidanimplementsFood,Condiment{publicvoidcook(){System.out.println("韭菜鸡蛋做好了");}@Overridepublicvoidadd(){System.out.println("添加鸡精。");}}具体产品4:

packagecreate.abstractfactory;publicclassJijingXihongshijidanimplementsFood,Condiment{publicvoidcook(){System.out.println("西红柿鸡蛋做好了");}@Overridepublicvoidadd(){System.out.println("添加鸡精。");}}产品分类1:

packagecreate.abstractfactory;publicinterfaceCondiment{voidadd();}产品分类2:

packagecreate.abstractfactory;publicinterfaceFood{publicvoidcook();}总产品接口:

packagecreate.abstractfactory;publicinterfaceCookFactory{publicFoodcreateXihongshijidan();publicFoodcreateJiucaijidan();}分类产品工厂1:

packagecreate.abstractfactory;publicclassJijingFactoryimplementsCookFactory{publicFoodcreateXihongshijidan(){returnnewJijingXihongshijidan();}publicFoodcreateJiucaijidan(){returnnewJijingJiucaijidan();}}分类产品工厂2:

packagecreate.abstractfactory;publicclassXiangyouFactoryimplementsCookFactory{publicFoodcreateXihongshijidan(){returnnewXiangyouXihongshijidan();}publicFoodcreateJiucaijidan(){returnnewXiangyouJiucaijidan();}}测试类:

packagecreate.abstractfactory;publicclassTest{publicstaticvoidmain(String[]args){CookFactoryff1=newJijingFactory();CookFactoryff2=newXiangyouFactory();Foodf1=ff1.createXihongshijidan();Foodf2=ff2.createXihongshijidan();f1.cook();f2.cook();}}

四、多级抽象工厂模式

考虑工厂模式,将简单工厂用抽象工厂替换。

如果工厂接口层级较高,需要考虑如果尽量少的改动上方接口进行接口分层,胡乱分层会出问题。层级越靠上的改动频率应该越低。

对于工厂之上的抽象系列,也可能是单纯的工厂里面进行产品分类形成的,可能是多个工厂合道一起也可能是一个工厂拆分。如果是拆分就看拆分的详细程度,决定了抽象程度。不管是合并还是拆分,其实都需要重构。想要一开始就设计完美是不可能的.

五、抽象工厂的实现步骤(以上面的抽象工厂为例)

1、分析具体的产品特性,找出2中不同类别的特征。

比如:香油的韭菜鸡蛋、鸡精的韭菜鸡蛋、香油的西红柿鸡蛋、鸡精的西红柿鸡蛋。

那么一个菜可以有主料和调两部分。

2、考虑2类特性那一个变化的几率比较低。

我个人认为调料新品种的出现会频率更高,那么就认为主料的变化相对固定。

3、根据变化频率低的创建总接口

接口:菜肴

里面两个方法:做一个西红柿鸡蛋

做一个韭菜鸡蛋

如果认为是调料稳定,那么这里应该是两外的两个方法:添加香油的食物、添加鸡精的食物。

4、根据总接口和具体菜肴,创建不同的工厂类

第一个工厂往里面添加香油

第二个工厂往里面添加鸡精

5、这时候考虑变化,我们认为调料是变化的,就会出现新的调料,比如生抽。

那么我们的变化是总接口不变化!!,然后添加一个新的工厂类。

如果总接口先变化,那么说明设计错误。

ps:项目地址svn://47.105.188.20/kitty/2%E3%80%81code/pattern用户名密码:reader/reader

THE END
1.小猫咪喜欢的类型你永远也猜不到...https://cj.sina.com.cn/articles/view/6803020261/m1957dd9e500100xgo1
2.猫咪语言主要分成四种类型猫咪是很聪明的动物,能够发出200多种声音,甚至有些聪明的猫咪学会了模仿人类的语言,比如俄罗斯的一只会说简单短语的猫咪,猫咪说话的新闻也屡见不鲜。介绍下猫咪语言的四种类型: 第一种:嘶叫 高亢的嘶叫声的同时,他嘴张开,舌头卷成圆筒状,并且有热气同时呼出。用来表示恐惧,发怒,甚至威胁对方止步。 http://news.boqii.com/cat/73494.html
3.这个难题八成猫主人都头痛?!别急,让猫主子乖乖喝水没那么难~丨养...选择一款自家猫咪愿意从里面喝水的碗,能够有效地帮助猫咪增加饮水量。 一般而言,相较于金属类型的水碗,猫咪更加喜欢玻璃和陶瓷材质的水碗。 ■图源丨微博网友视频截图 猫通常不喜欢胡须接触到水碗或食物碗,这会让它们产生焦虑感。大多数猫咪都喜欢宽而浅的碗,这样它们就无需将整个头放在容器中即可饮用。也要记得将...https://static.zhoudaosh.com/D81055CB871631239875CDF94596D4C5E9CC5976271802B99B714BC299448C13
1.猫咪图片种类大全,让你的宠物生活更有趣(品种多样)养宠知识这类照片则是捕捉到了猫咪们搞怪的一面。让人捧腹大笑,在这些图片中,你能看到猫咪们做出各种卖萌和神奇的姿势。这些照片也是猫咪粉丝们最喜欢的类型之一。 浪漫猫咪图片 就会产生浪漫的效果,当猫咪与花环相遇。与花环相融合、让人感受到了一股温馨的气息、这类图片多数能展现出猫咪们柔美的一面。 https://www.pettb.cn/article-15730-1.html
2.《救猫咪》电影类型分析笔记1.“侦探”没有变化,变化的是我们。“侦探”可以是各种类型的人,包括现实中的职业侦探,也可以是想象世界中的人物; 2.秘密与世俗的金钱、性、权力或是名望有关。我们想知道这个秘密,同样,影片中的主人公也想知道; 3.最后,在揭秘的过程中,主人公会经历“黑暗转折”,他会因此违背自己的准则,通常这个准则是他做人...https://m.douban.com/note/733894697
3.滴滴出行集猫怎么分享二维码滴滴集猫二维码生成方法通过【萌猫跳】有机会获得猫咪,具体玩法详见活动页面(此方法不可以获得青桔喵)。 6、限时抢彩蛋猫 同一用户在指定时间到会场内【抢彩蛋猫】处参与限时抢彩蛋猫,每场限时抢活动的彩蛋猫数量有限,发完为止。 7、猫咪类型 8种基础猫型(奶泡喵、青桔喵、喵老板、睫毛精、桔奥利、拿铁喵、冰山脸、x-cat)、 3 种彩...https://app.3dmgame.com/mip/gl/217573.html
4.宠物猫咪起名大全,看你属于哪种类型第三种是以自己的偶像命名的,来时刻提醒自己,偶像就在身边,还可以抱着睡,哈哈,比如:小贝、凡凡、峰峰、淳淳等,还有漫画里的一些人物,如路飞、辛巴、加菲等等,都是些不错的猫咪名字。第四种以身份称呼命名,如贝勒、太子、娘娘、爱妃等等。还有一些吃货会以爱吃的食物命名,这也是一种类型,当然也可以是运动、景点...https://www.22005.cn/chongwumaozixun/2194.html
5.宠物情缘揭示你的恋爱心理心理保健这种类型的人,在感情上从外界来看是个很容易被读懂的人。一旦恋爱了,即使不说,周围的人也能猜到。一直想和恋人在一起甜甜蜜蜜,不擅长远距离恋爱。绝对不能原谅对方花心。 2、喜欢狗、但是属于猫咪类型 这种类型的人,希望恋人像狗狗一样依赖自己,但是自己却是脾气难以捉摸、并且崇尚自由。喜欢捉弄对方,更愿意看到...https://www.vodjk.com/xlbj/170307/1073172.shtml
6.猫咪种类排行榜揭秘最受宠爱的猫品种最终决定一个地方最受欢迎的是它所占据的人气指数以及市场上的实际需求。当某个地区出现大量关于某一种具体类型猎豹犬讨论或者出售,那么这个地方那时候可能就是那个类型猎豹犬的人气高峰期。在这里,我们可以看到不同地域之间对于不同的“最佳”或“流行”的差异反映出每个地区独特的地方特色。https://www.udbqij552.cn/chan-qu/438844.html
7.猫的品种之美揭秘不同类型的猫咪特点猫的品种之美揭秘不同类型的猫咪特点 体型与外观 猫咪的体型和外观是它们最为人眼中的第一印象。从迷你到巨大,从细长到圆润,各种品种都有其独特的身形特征。例如,英国短毛猫以其紧凑、结实的体型和平滑、短而密集的毛发而闻名。而比利时梗则因其小巧玲珑、肌肉发达且四肢比例匀称而受到喜爱。https://www.tepnz.com/zhi-shi/391223.html
8.12个热门猫咪品种优缺点大盘点,有没有你喜欢的类型?12 个热门猫咪品种优缺点大盘点,有没有你喜欢的类型? 猫咪品种多样,当然了他们的性格也各不相同,几乎每个品种的猫咪都有着自己独特的个性,今天小编整理了 12 种常见猫咪的优缺点,看看你的猫咪可以对号入座吗?越来越多的人开始养猫了,如果你有养猫的计划,但还在为选择什么品种的猫咪而发愁,可以作为参考哟~ 看看...https://www.pmshe.com/80912.html
9.猫咪田园喵喵猫小白类型介绍喵喵猫小白性格一览猫咪田园游戏中是有很多的猫咪种类的,今日小编就为大家带来的是本次的第一个上场的猫咪,它就是喵喵猫小白,这个猫咪的性格是什么呢,就一起来看一下吧。 1、喵喵猫小白罕见度是一个猫爪子,其长相就是猫头和身体的上半部分猫发是黄色的,其余的都是白色 ...http://www.gamedog.cn/games/a/2765514.html
10.C++栈字符串c++字符串栈26.新的 Mystring 类型 27.猫咪 #include<stddef.h> #include<string.h> #include<iostream> #include<string> usingnamespacestd; classCat{ private: string _Owner; string _Name; staticintnum; public: Cat(conststring &p,conststring &ps) :_Owner(p), _Name(ps) { ...https://blog.csdn.net/m0_62538383/article/details/125629213