一文搞懂设计模式--简单工厂

简介: 一文搞懂设计模式--简单工厂

简单工厂


介绍


提供一个创建对象实例的功能,而无须关心具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体实现的类


实例


类图如下

image.png

UML图的解释:

  • Car为抽象类
  • VanCar和MiniCar为Car的子类
  • WuliFactory创建负责创建这两个对象(通过黄色部分逻辑判断)

抽象汽车接口

为什么要抽象出一个汽车接口呢?我们直接生成汽车类不行吗?

这里其实也体现了设计模式7大原则中的依赖倒置原则,也就是面向接口编程。同时也能体现出开闭原则,对扩展开放,对修改关闭。如果需要新的汽车,那么就新建一个类去实现这个接口即可!(不改变源代码,而是对其扩展)


public interface AbstractCar {
    void run();
}

汽车实现类


public class BenchiCar implements AbstractCar{
    @Override
    public void run() {
        System.out.println("我是奔驰,我可以跑跳着跑!");
    }
}
public class WulingCar implements AbstractCar{
    @Override
    public void run() {
        System.out.println("我是五菱,我能飞!");
    }
}

简单工厂

这个工厂很简单,就是提供了一个方法。可以根据传来的参数创建相应的对象


public class CarFactory {
    public AbstractCar returnCar(String type) {
        if ("Benchi".equals(type)) {
            return new BenchiCar();
        } else if ("Wuling".equals(type)) {
            return new WulingCar();
        }
        //......有新的汽车进来,那就需要改变造车厂的逻辑,在添加if,else
        return null;
    }
}

会员端

我们在会员端来体会一下简单工厂的作用:

  • new这个简单工厂
  • 调用简单工厂中创建对象的方法
  • 运行对应对于的方法

通过运行结果我们可以发现,我们只需要创建工厂然后调用里面的方法对象就被创建出来了。这不就是我们前面说的隐藏了对象的创建细节,并提供一个创建对象的通用接口,实现了解耦。


public class Client {
    public static void main(String[] args) {
        CarFactory factory = new CarFactory();
        AbstractCar benci = factory.returnCar("Benchi");
        AbstractCar wuling = factory.returnCar("Wuling");
        benci.run();
        wuling.run();
    }
}
我是奔驰,我可以跑跳着跑!我是五菱,我能飞!

总结


1.使用的场景?

如果想要完全的封装和隔离具体的实现,让外部只能通过接口来操作封装部分,那这个时候选择简单工厂。

如果想把创建对象的工作集中管理,可以选用简单工厂

2.本质是什么?

选择实现

为什么是选择实现?因为简单工厂已经把对象创建好了,客户端只需要进行选择即可。 这样也可以使客户端和实现之间解耦。如果你的实现发生了变化,也不需要动客户端的代码。

3.它解决了什么问题?

  • 将类的实例化和对象的操作分开,避免了在客户端代码中显示指定,实现了解耦
  • 屏蔽了使用细节,消费者可以直接使用

4.它体现了设计模式中什么原则?

面向接口编程(依赖倒置原则)

5.存在的缺陷?

  • 可能增加客户端的复杂度:客户端需要理解参数是什么意义,同时也暴露了内部的实现

6.你认为与它相关的设计模式有哪些? 它们之间的区别有哪些?

后期更新...



相关文章
|
6月前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
6月前
|
设计模式 Java PHP
php设计模式--简单工厂模式(一)
php设计模式--简单工厂模式(一)
35 0
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
6月前
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
3月前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
3月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
3月前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
5月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
5月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
5月前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
55 5

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    46
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    54
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    62
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    57
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    41
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    106
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78