跟我一起学“仓颉”设计模式-抽象工厂模式
2026/6/9 23:13:00 网站建设 项目流程

一、抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。(创建型)

为了更好的理解抽象工厂,需要了解两个概念:

产品等级结构:产品继承结构,比如:手机是抽象类,华为手机、荣耀手机就是它的子类;

产品族:同一工厂生产的位于不同产品等级结构中的一组产品,比如:华为工厂生产华为手机、华为电脑,华为手机位于手机产品等级结构,华为电脑位于电脑产品等级结构中,华为手机和华为电脑构成一个产品族。

抽象工厂包含以下角色:

  • 抽象工厂:用于创建一族产品的接口;
  • 具体工厂:实现抽象工厂里创建一组产品的方法,生成一组具体的产品,每个产品都位于该产品等级结构;
  • 抽象产品:每种产品接口;
  • 具体产品:定义具体工厂的具体产品对象。

二、实现

在src目录下,新建一个abstractfactory文件夹,在该文件夹下新建一个abstractfactory.cj文件和abstractfactory.drawio文件。

类图

核心代码

package DesignPattern.abstractfactory // 抽象产品 public interface Phone { func getInfo():Unit } class HuaWeiPhone <: Phone { public override func getInfo() { println("华为手机") } } class RongYaoPhone <: Phone { public override func getInfo() { println("荣耀手机") } } // 抽象产品 public interface Computer { func getInfo(): Unit } class HuaWeiComputer <: Computer { public override func getInfo() { println("华为电脑") } } class RongYaoComputer <: Computer { public override func getInfo() { println("荣耀电脑") } } // 抽象工厂 public interface Factory { func createPhone(): Phone func createComputer(): Computer } public class HuaWeiFactory <: Factory { // 生产华为手机 public override func createPhone(): Phone { return HuaWeiPhone() } // 生产华为电脑 public override func createComputer(): Computer { return HuaWeiComputer() } } public class RongYaoFactory <: Factory { // 生产荣耀手机 public override func createPhone(): Phone { return RongYaoPhone() } // 生产荣耀电脑 public override func createComputer(): Computer { return RongYaoComputer() } }

测试代码

package DesignPattern import DesignPattern.abstractfactory.* main(): Int64 { HuaWeiFactory().createPhone().getInfo() HuaWeiFactory().createComputer().getInfo() RongYaoFactory().createPhone().getInfo() RongYaoFactory().createComputer().getInfo() return 0 }

三、优缺点

优点:

  • 抽象工厂隔离了具体类的生成,想要更换不同的产品,只需要更换该产品的工厂即可;
  • 当一个产品族的多个对象被设计成一起工作时,可以保证客户端始终只使用同一个产品族中的对象。

缺点:

  • 添加新的产品等级结构麻烦,需要改动原有的代码,违背了开闭原则。

四、适用环境

  • 系统中有多个产品族,而每次都只使用一个产品族;
  • 产品等级结构稳定,在系统设计完成后,不会向系统中增加新的产品等级结构或者删除原有的等级结构。

五、小结

本章为大家详细的介绍了仓颉设计模式中抽象工厂模式的内容,下一章,为大家带来抽象工厂模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询