工厂模式实现解耦

简介: 工厂模式实现解耦

解耦的含义


解耦的含义:降低程序之间的依赖性。

在实际开发中,应该做到编译期不依赖,运行时才依赖。


需求


我们有两个类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....");
    }
}

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();
    }
}

这种办法耦合度太高,如果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....");
    }
}

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();
    }
}

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();
    }
}

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


相关文章
|
7月前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
6月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
33 5
|
2月前
|
设计模式 网络协议 Java
02.工厂模式设计思想
本文档详细介绍了工厂模式设计思想,包括简单工厂、工厂方法和抽象工厂三种类型。简单工厂通过参数返回不同类的实例,适合对象较少的场景;工厂方法通过定义抽象工厂接口,由子类实现具体对象的创建,增强扩展性;抽象工厂则能创建多个产品族,适用于产品间有依赖关系的情况。文档还通过咖啡店点餐系统案例,展示了三种模式的应用及优缺点,帮助读者理解和选择合适的工厂模式。
19 1
|
4月前
|
设计模式 算法 开发者
深入理解工厂模式与策略模式:设计模式的灵活应用
深入理解工厂模式与策略模式:设计模式的灵活应用
|
7月前
|
设计模式 程序员 数据处理
C++ 职责链模式:轻松实现解耦和扩展性
C++ 职责链模式:轻松实现解耦和扩展性
86 1
|
设计模式 XML 数据格式
设计模式之单例模式、工厂模式、发布订阅模式以及观察者模式
设计模式之单例模式、工厂模式、发布订阅模式以及观察者模式
|
设计模式 C++
设计模式工厂三姐妹
最近对于设计模式中的工厂三姐妹——大姐(抽象工厂)、二姐(工厂模式)、三姐(简单工厂),进一步学习了,以下是我的一些认识。
|
设计模式 前端开发 数据库
设计模式-三个工厂
设计模式-三个工厂
71 0
|
机器学习/深度学习 设计模式 缓存
设计模式——单一职责模式之装饰模式
在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。
63 0
|
设计模式
设计模式——对象创建模式之工厂模式
通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。
77 0