1. 引言
在后端开发中,为了方便管理和重写代码,提出了很多的设计方法,俗称设计模式;
根据关注点不一样分为三种:
-
创建型模式关注点是如何创建对象,其核心思想是要把对象的创建和使用相分离,这样使得两者能相对独立地变换。 -
结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。 -
行为型模式主要涉及算法和对象间的职责分配。
本次来讲解下设计模式中的工厂方法模式,该模式属于创建型模式。
2. 工厂方法
2.1 理论简介
工厂方法包括4部分,分别为:抽象工厂、具体工厂、抽象产品和具体产品。

如上图所示,为4个部分组成的关系图。
-
抽象工厂:最顶级的接口类,对外提供入口,其他的工厂都需要实现其接口,创建不同的具体工厂类。 -
具体工厂:该类需实现抽象工厂,并且实现抽象工厂中的方法,在方法中导入产品依赖,就可以根据依赖的不同创造出不同的产品。 -
抽象产品:最顶级的接口类,对外提供入口,在接口中提供方法,统一定义该产品的功能。 -
具体产品:该类实现于抽象产品,需要重写抽象产品接口,实现具体产品的功能。
2.2 代码实现
接下来以代码的形式,展现工厂方法模式具体的实现方式,帮助各位理解;在代码中使用工厂方法创建两款产品分别是小米牌的空调和格力牌的空调。其类图如下:

抽象产品接口:该接口定义空调统一的功能。
/**
定义一个空调产品抽象接口
*/
public interface Air{
// 定义空调用于制冷的方法
void cool()
}
具体产品类:具体的产品包括小米牌、格力牌
/**
定义小米牌空调的产品
*/
public class xiaomiAir implements Air{
@Override
void cool(){
System.out.println("使用小米空调,制冷真快!")
}
}
/**
定义格力牌空调的产品
*/
public class GREEAir implements Air{
@Override
void cool(){
System.out.println("使用格力空调,制冷真快!")
}
}
产品定义好后,接下来定义工厂是如何制造出不同的空调。
抽象工厂接口:定义一个接口,定义统一的规范。
/**
定义一个实现空调制造的抽象接口
*/
public interface AirFactory{
// 在抽象工厂中定义制造空调的方法
Air createAir();
}
具体工厂类:该类实现抽象工厂接口,可以根据品牌不同创建不同的品牌工厂,比如小米牌、格力牌。
/**
制造小米空调的工厂类
*/
public class XiaomiFactory implements AirFactory{
//创建小米空调
public Air createAir(){
return new XiaomiAir();
}
}
/**
制造格力空调的工厂类
*/
public class GREEFactory implements AirFactory{
//创建格力空调
public Air createAir(){
return new GREEAir();
}
}
如何使用:如何去调用工厂创建产品,并使用呢?
public static void main(String[] args) {
// 使用小米空调制冷
/**
1. 创建工厂
2. 使用工厂创建产品
3. 产品发挥作用
*/
AirFactory xiaomiFactory = new XiaomiFactory();
Air xiaomAir = xiaomiFactory.createAir();
xiaoAir.cool();
// 同理使用格力空调制冷
AirFactory greeFactory = new GREEFactory();
Air greeAir = greeFactory.createAir();
greeAir.cool();
}
3. 结尾
如上就使用了工厂方法创建了两款产品,并且使用了产品。可以发现,工厂方法将对象的创建和对象的使用分隔开来了。在代码中,完全展现的都是接口、工厂类和方法,对于产品创建的细节,其调用方是完全不同关注的,因此在修改其中逻辑时,调用方都是无感的,不需要动自己的代码。当需要创建其他品牌的产品时,只需像以上的方式创建两个实现类即可,无需动其他的类,实现隔离,相比于if-else
更加便于管理。
在Spring
框架中也有很多地方使用到工厂方法模式,比如logger
,等待大家去探索。
原文始发于微信公众号(CodeJames):最简单的设计模式之工厂方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/148235.html