工厂模式实现解耦

举报
牛哄哄的柯南 发表于 2021/05/26 16:27:24 2021/05/26
【摘要】 工厂模式实现解耦 解耦的含义需求原始方式,耦合度高工厂模式实现解耦 解耦的含义 解耦的含义:降低程序之间的依赖性。 在实际开发中,应该做到编译期不依赖,运行时才依赖。 需求 我们有两个类UserService和UserDao,我们想实现UserService调用UserDao中的add方法。 原始方式,耦合度高 传统的操作是我们在UserServ...

解耦的含义

解耦的含义:降低程序之间的依赖性。
在实际开发中,应该做到编译期不依赖,运行时才依赖。

需求

我们有两个类UserService和UserDao,我们想实现UserService调用UserDao中的add方法。

原始方式,耦合度高

传统的操作是我们在UserService中new出来一个UserDao的对象,通过UserDao的对象调用add方法。
UserDao代码:

package com.Keafmd.spring5.test;

/**
 * Keafmd
 *
 * @ClassName: UserDao
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 11:45
 */
public class UserDao { public void add(){ System.out.println("add...."); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

UserService代码:

package com.Keafmd.spring5.test;

/**
 * Keafmd
 *
 * @ClassName: UserService
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 11:45
 */
public class UserService { public void execute(){ UserDao userDao = new UserDao(); userDao.add(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这种办法耦合度太高,如果UserDao的文件路径发生改变或者方法发生改变,那么我们的UserService也要相应的改变,不利于程序拓展。

工厂模式实现解耦

创建一个UserFactory类让这个类的getDao方法返回一个UserDao对象。然后让UserService调用UserFactory对象的getDao方法,来获取UserDao对象从而使用UserDao的方法。

目的:让耦合度降低到最低限度,不可能完全没有耦合。

UserDao代码:

package com.Keafmd.spring5.test;

/**
 * Keafmd
 *
 * @ClassName: UserDao
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 11:45
 */
public class UserDao { public void add(){ System.out.println("add...."); }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

UserFactory代码:

package com.Keafmd.spring5.test;

/**
 * Keafmd
 *
 * @ClassName: UserFactory
 * @Description: User工厂类
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 11:59
 */
public class UserFactory { public static  UserDao getDao(){ return new UserDao(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

UserService代码:

package com.Keafmd.spring5.test;

/**
 * Keafmd
 *
 * @ClassName: UserService
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 11:45
 */
public class UserService { public void execute(){ UserDao userDao = new UserFactory().getDao(); userDao.add(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

虽然这样还是有耦合,但是已经降低了耦合度,再进一步降低就需要用到IOC,在此我们讲解的工厂模式就讲完了。

看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]

在这里插入图片描述
加油!

共同努力!

Keafmd

文章来源: keafmd.blog.csdn.net,作者:牛哄哄的柯南,版权归原作者所有,如需转载,请联系作者。

原文链接:keafmd.blog.csdn.net/article/details/112655664

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。