0
点赞
收藏
分享

微信扫一扫

【Java设计模式】② 简单工厂模式



文章目录

  • ​​前言​​
  • ​​简单工厂模式​​
  • ​​优点​​
  • ​​缺点​​
  • ​​应用场景​​
  • ​​实现​​

前言

工厂模式分为简单工厂模式工厂方法模式抽象工厂模式,它们都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,目的是降低系统中代码耦合度,并且增强系统的扩展性。

简单工厂模式

1、简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。
2、简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)。
3、在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。

简单工厂模式包含如下角色:

  • Factory(工厂角色):工厂角色负责实现创建所有实例的内部逻辑
  • Product(抽象产品角色):抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • ConcreteProduct(具体产品角色):具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

【Java设计模式】② 简单工厂模式_java

优点

  1. 对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责
  2. 客户端无需知道所创建具体产品的类名,只需知道参数即可。

缺点

  1. 工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

应用场景

  1. 产品种类相对较少的情况下,使用简单工厂模式。在简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象,就可以得到一个想要的产品。

实现

使用简单工厂模式模拟工厂生产手机,如果传入参数HuaWei,则返回一个HuaWei对象,如果传入参数XiaoMi,则返回一个XiaoMi对象。并且调用他们的方法。

  1. 定义一个接口
public interface Phone {
//打电话的方法
public void call();
//发短信的方法
public void message();
}
  1. 创建两个接口的实现类
public class HuaWei implements Phone{
@Override
public void call() {
System.out.println("Using a Huawei phone to make calls");
}

@Override
public void message() {
System.out.println("Use huawei mobile phones to send short messages");

}
}
public class XiaoMi implements Phone{
@Override
public void call() {
System.out.println("Using a XiaoMi phone to make calls");
}

@Override
public void message() {
System.out.println("Use XiaoMi mobile phones to send short messages");

}
}
  1. 创建一个工厂
public class SimpleFactory {

public Phone usePhone(String type){
if ("HuaWei".equalsIgnoreCase(type)){
return new HuaWei();
}else if ("XiaoMi".equalsIgnoreCase(type)){
return new XiaoMi();
}else{
System.out.println("没有该品牌的手机!!!");
return null;
}

}

}
  1. 测试
public class Test {
public static void main(String[] args) {

SimpleFactory factory = new SimpleFactory();
Phone huaWei = factory.usePhone("HuaWei");
Phone xiaoMi = factory.usePhone("XiaoMi");
huaWei.call();
huaWei.message();
xiaoMi.call();
xiaoMi.message();
Phone vivo = factory.usePhone("Vivo");
}
}

【Java设计模式】② 简单工厂模式_工厂类_02


举报

相关推荐

0 条评论