【151期】面试官:熟悉设计模式吗?谈谈简单工厂模式和策略模式的区别?

别问别人为什么,多问自己凭什么!

下方留言必回,有问必答!

每天 0****8:35 更新文章,每天进步一点点…

刚刚接触设计模式的时候,我相信单例模式和工厂模式应该是用的最多的,毕竟很多的底层代码几乎都用了这些模式。自从接触了一次阿里的公众号发的一次文章关于 DDD的使用 以后,就逐渐接触了策略模式。现在在项目中运用最多的也是这几种设计模式了,用了设计模式给我的感受就是感觉代码没那么冗余了,再注入一点贫血,充血模型之后,感觉在 service 层面代码看上去很舒服很简洁。

首先,我个人感觉策略模式和我们常说的微服务我觉得思想上很像,尤其记得当时介绍DDD时候的举例说的是关于银行的转账案例,用的事务和领域驱动设计做的比较,让人一目了然的逻辑,代码也再也没有那么冗余了。(具体的文章地址找不到了,不过网上现在比较多的介绍DDD的,大体意思是一样的)

其实工厂模式和设计模式一直给人一种错觉,总感觉是一样的,没有丝毫的区别。可以看下两种模式的UML图

576acc3135c05662d13be207fce6e34d.png

从图上来看,并没有多大的区别,话不多说,从具体的代码入手。

推荐:Java进阶学习资料

先写一个人的接口类,有eat,run,wear 3个方法

public interface People {

public void eat();

public void run();

public void wear();

}

分别写两个实现类,一个是小明的实现类,一个是小红的实现类

public class Xiaoming implements People{

@Override

public void eat() {

System.out.println(“小明吃饭”);

}

@Override

public void run() {

System.out.println(“小明跑步”);

}

@Override

public void wear() {

System.out.println(“小明穿衣”);

}

}

public class Xiaohong implements People{

@Override

public void eat() {

System.out.println(“小红吃饭”);

}

@Override

public void run() {

System.out.println(“小红跑步”);

}

@Override

public void wear() {

System.out.println(“小红穿衣”);

}

}

简单工厂模式的代码

public class PeopleFactory {

public People getPeople(String name){

if(name.equals(“Xiaoming”)){

return new Xiaoming();

}else if(name.equals(“Xiaohong”)){

return new Xiaohong();

}

return null;

}

}

再来看下策略模式的代码

public class StrategySign {

private People people;

public StrategySign(People people){

this.people = people;

}

public StrategySign(String name){

if(name.equals(“Xiaoming”)){

this.people = new Xiaoming();

}else if(name.equals(“Xiaohong”)){

this.people = new Xiaohong();

}

}

public void run(){

people.run();

}

}

策略模式的两种构造方法都可以用,我多写了一种是为了让大家看到和工厂模式的区别和联系

然后我们通过测试类运行两种模式

@Test

public void testSign(){

PeopleFactory peopleFactory = new PeopleFactory();

People people = peopleFactory.getPeople(“Xiaohong”);

System.out.print(“工厂模式-------------”); people.run();

StrategySign strategySign = new StrategySign(“Xiaohong”);

System.out.print(“策略模式-------------”);strategySign.run();

}

52af405ec9e04fce3897d95fcecbe6bf.png

推荐:Java进阶学习资料

可以看到,两种设计模式的运行结果是一模一样的,那么区别到底在哪呢。

分享

1、算法大厂——字节跳动面试题

2、2000页互联网Java面试题大全

3、高阶必备,算法学习

推荐:Java进阶学习资料

可以看到,两种设计模式的运行结果是一模一样的,那么区别到底在哪呢。

分享

1、算法大厂——字节跳动面试题

[外链图片转存中…(img-JUWECKIc-1726125043192)]

2、2000页互联网Java面试题大全

[外链图片转存中…(img-6vpsf37L-1726125043193)]

3、高阶必备,算法学习

[外链图片转存中…(img-57x2Tjxm-1726125043193)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值