一、抽象工厂模式抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。创建型为了更好的理解抽象工厂需要了解两个概念产品等级结构产品继承结构比如手机是抽象类华为手机、荣耀手机就是它的子类产品族同一工厂生产的位于不同产品等级结构中的一组产品比如华为工厂生产华为手机、华为电脑华为手机位于手机产品等级结构华为电脑位于电脑产品等级结构中华为手机和华为电脑构成一个产品族。抽象工厂包含以下角色抽象工厂用于创建一族产品的接口具体工厂实现抽象工厂里创建一组产品的方法生成一组具体的产品每个产品都位于该产品等级结构抽象产品每种产品接口具体产品定义具体工厂的具体产品对象。二、实现在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 }三、优缺点优点抽象工厂隔离了具体类的生成想要更换不同的产品只需要更换该产品的工厂即可当一个产品族的多个对象被设计成一起工作时可以保证客户端始终只使用同一个产品族中的对象。缺点添加新的产品等级结构麻烦需要改动原有的代码违背了开闭原则。四、适用环境系统中有多个产品族而每次都只使用一个产品族产品等级结构稳定在系统设计完成后不会向系统中增加新的产品等级结构或者删除原有的等级结构。五、小结本章为大家详细的介绍了仓颉设计模式中抽象工厂模式的内容下一章为大家带来抽象工厂模式练习题的内容。最后创作不易如果大家觉得我的文章对学习仓颉设计模式有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家
跟我一起学“仓颉”设计模式-抽象工厂模式
一、抽象工厂模式抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。创建型为了更好的理解抽象工厂需要了解两个概念产品等级结构产品继承结构比如手机是抽象类华为手机、荣耀手机就是它的子类产品族同一工厂生产的位于不同产品等级结构中的一组产品比如华为工厂生产华为手机、华为电脑华为手机位于手机产品等级结构华为电脑位于电脑产品等级结构中华为手机和华为电脑构成一个产品族。抽象工厂包含以下角色抽象工厂用于创建一族产品的接口具体工厂实现抽象工厂里创建一组产品的方法生成一组具体的产品每个产品都位于该产品等级结构抽象产品每种产品接口具体产品定义具体工厂的具体产品对象。二、实现在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 }三、优缺点优点抽象工厂隔离了具体类的生成想要更换不同的产品只需要更换该产品的工厂即可当一个产品族的多个对象被设计成一起工作时可以保证客户端始终只使用同一个产品族中的对象。缺点添加新的产品等级结构麻烦需要改动原有的代码违背了开闭原则。四、适用环境系统中有多个产品族而每次都只使用一个产品族产品等级结构稳定在系统设计完成后不会向系统中增加新的产品等级结构或者删除原有的等级结构。五、小结本章为大家详细的介绍了仓颉设计模式中抽象工厂模式的内容下一章为大家带来抽象工厂模式练习题的内容。最后创作不易如果大家觉得我的文章对学习仓颉设计模式有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家