刚开始接触设计模式的时候,我认为用的最多的应该是单例模式和工厂模式。毕竟很多底层代码几乎都用到了这些模式。自从接触到一篇介绍DDD使用的文章后,我就逐渐接触到了策略模式。这些设计模式是现在项目中使用最多的。感觉用了设计模式后代码没那么冗余了。注入一点贫血和拥塞模型后,感觉服务层面的代码看起来很舒服。非常简洁。首先,我个人觉得策略模型和我们常说的微服务很像。尤其记得当时介绍DDD的时候,用了一个银行转账的例子。比较了使用的事务和领域驱动设计。让逻辑让人一目了然,代码也不再那么冗余。(具体的文章地址找不到了,不过网上对DDD的介绍比较多,大体意思是一样的。)其实工厂模式和设计模式一直给人一种错觉,总觉得一样,没有丝毫区别。可以看看两种模式的UML图。从图中看,差别不大。话不多说,先上具体代码。先写一个person的接口类,里面有eat、run、wear三个方法publicinterfacePeople{publicvoideat();公共无效运行();publicvoidwear();}分别写两个实现类,一个是小明的实现类,一个是小红的实现类;}@Overridepublicvoidrun(){System.out.println("小明跑步");}@Overridepublicvoidwear(){System.out.println("小明穿衣");}}publicclassXiaohongimplementsPeople{@Overridepublicvoideat(){System.out.println("小红在吃饭");}@Overridepublicvoidrun(){System.out.println("小红在跑");}@Overridepublicvoidwear(){System.out.println("小红在穿衣服");}}简单工厂模式代码publicclassPeopleFactory{publicPeoplegetPeople(Stringname){if(name.equals("Xiaoming")){returnnewXiaoming();}elseif(name.equals("小红")){returnnew小红();}返回空值;}}我们再看一下策略模式的代码publicclassStrategySign{privatePeoplepeople;publicStrategySign(Peoplepeople){this.people=people;}publicStrategySign(Stringname){if(name.equals("Xiaoming")){this.people=newXiaoming();}elseif(name.equals("小红")){this.people=new小红();}}publicvoidrun(){people.run();}}strategy模式的两种构造方法都可以使用。我再写一篇,让大家看看和工厂模式的区别和联系。然后我们通过测试类来运行两种模式@TestpublicvoidtestSign(){PeopleFactorypeopleFactory=newPeopleFactory();Peoplepeople=peopleFactory.getPeople("小红");System.out.print("工厂模式------------");人.run();StrategySignstrategySign=newStrategySign("小红");System.out.print("StrategyMode-------------");strategySign.run();}可以看到原来两种设计模式的结果是完全一样的,那么区别是什么呢?从工厂模式的代码可以看出,工厂模式主要是返回的接口实现类的实例化对象,最终返回的结果是接口实现类中的方法,策略模式在创建的时候已经创建好了策略模式是实例化的,我们可以在策略模式中随意拼接和改写方法,而工厂模式则不关心方法的拼接。它只关注最终的结果,不关注过程,而策略模式关注的是过程。我们来看一个具体的例子。如果我想让小红先吃饭,然后在吃饭前跑,那么我需要在测试类中写三个类型,我只需要直接在策略模式的方法中定义即可。可以看到如下代码:publicclassStrategySign{privatePeoplepeople;publicStrategySign(Peoplepeople){this.people=people;}publicStrategySign(Stringname){if(name.equals("Xiaoming")){this.people=newXiaoming();}elseif(name.equals("小红")){this.people=new小红();}}publicvoidrun(){people.eat();人.run();人们。eat();}}@TestpublicvoidtestSign(){PeopleFactorypeopleFactory=newPeopleFactory();Peoplepeople=peopleFactory.getPeople("小红");System.out.print("工厂模式-------------");人们吃();System.out.print("工厂模式------------");人.run();System.out.print("工厂模式-------------");人们吃();StrategySignstrategySign=newStrategySign("小红");System.out.print("StrategyMode------------");strategySign.run();}有人可能会说,如果我直接把这些方法拼接在实现类里,岂不是没事吧?但在那种情况下,每次我们更改逻辑时,我们都需要添加一个新方法。一次两次还可以,但是当逻辑多了,这些代码就会变成它非常冗余且难以维护。从目前的情况来看,工厂模式能做到的,策略模式也能做到。策略模式能做到的,工厂模式也能做到,只是会变麻烦。从上面的描述来看,策略模式很像我们常说的微服务。比如我们写的三个接口,吃是微服务,跑是微服务,穿衣是微服务。策略模式的目的是将各种方法连接起来,实现一个新的方法。微服务的目的是为了防止服务的多次调用,降低代码的耦合度。所以,看起来策略模式和微服务还是挺像的。的。来源:blog.csdn.net/lmx125254/article/details/86625960近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
