Java设计模式值简单工厂设计模式

本文介绍了简单工厂模式的概念及其如何帮助实现面向接口编程的原则。通过对比使用与未使用简单工厂模式的示例,展示了该模式如何降低系统各部分间的耦合度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在设计原则中有这样一句话“我们应该针对接口编程,而不是正对实现编程”。这就是所谓的DIP原则。但是我们还是在一直使用new关键字来创建一个对象,这不就是在针对实现编程么?

        针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。入股代码是针对接口而写,那么可以通过多态,它可以与任何新类实现该接口。但是,当代码使用一大堆的具体类时,等于是自找麻烦,因为一旦加入新的具体类,就必须要改变代码。在这里我们希望能够调用一个简单的方法,我传递一个参数过去,就可以返回给我一个相应的具体对象,这个时候我们就可以使用简单工厂模式。

简单工厂模式的定义:

简单工厂模式又称之为静态工厂方法,属于创建型模式。在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。

当我们没有使用简单工厂模式的时候,我们如果要创建相关的对象的时候,我们的代码如下:

(1)首先是一个Interface Car:

public interface Car {
void run();
}

(2)接着是俩个实现类:

Audi:

public class Audi implements Car {

    public void run(){
    System.out.println("奥迪在跑");
    }
}

Byd:

public class Byd  implements Car{
 public void run(){
 System.out.println("比亚迪在跑");
 }
}

(3)在没有使用简单工厂模式的时候,一个调用者如果需要创建相关的对象的代码如下:

public class Client01 {//这是相当于调用者
      public static void main(String[] args){
//      调用者不仅需要与接口进行打交道,还需要与具体的实现类进行打交道。这违反了DIP原则。
     Car c1=new Audi();
     Car c2=new Byd();
     c1.run();
     c2.run();
      }
}

这个简单项目的类图关系如下:


从这个类图关系可以看出,调用者Client01既需要与接口打交道,也需要与具体的实现类进行打交道。这就很明显地增加了类之间的耦合关系。

但是当我们使用了简单工厂模式以后,那么一切很明显就变得简单起来了:

方法一:

//其实简单工厂设计模式还是有一点小小的问题的。比如说当我需要再增加一种类型的车子的时候,那么
//我就需要在这种代码的原有的基础上进行修改。这就是违反了OCP原则。为了改进,其实可以利用工厂方法设计模式来进行创建

public class CarFacory01 {

public static Car createCar(String type){
if("奥迪".equals(type)){
return new Audi();
}else if("比亚迪".equals(type)){
return new Byd();
}else{
return null;
}

}

方法二:

//同时也可以使用这种方法来创建所需要的车。也正是因为这种方法,所以简单工厂设计模式,也叫做
//静态工厂设计模式。
public class CarFactory02 {
public static  Car createAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}

如果是使用了简单工厂设计模式,那么调用者Client02就不需要与具体的实现类进行打交道了:具体的代码如下:

//如果是利用了简单工厂设计模式的话,那么我们的调用者就不需要与具体的实现类进行打交道了。
//也就是说调用者不用关心车这个对象是怎么构造出来的,只要给定参数,我就可以给你创造出一个对象了。
public class Client02 {
public static void main(String[] args){
Car c1=CarFacory01.createCar("奥迪");
Car c2=CarFacory01.createCar("比亚迪");
c1.run();
c2.run();
}
}

最后运行的结果为:

奥迪在跑

比亚迪在跑

使用了简单工厂设计模式以后,那么整个类图的关系如下:


对于内部的类之间的关系来说,各个类之间的关系变得复杂了,但是对于外部的调用者client02来说,就变得简单多了。因为外部的调用者不再需要与具体的实现类进行打交道。它只需要传入一个简单的参数,就可以进行对象的创建了。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱coding的同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值