🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。每种设计模式都有相应的原理和最佳实践,它们描述了我们日常开发中不断遇到的问题,以及这些问题的核心解决方法。正是因为这种实用性和通用性,设计模式才能在软件开发中广泛地得以应用。设计模式是构建稳健、可扩展和可维护软件的关键工具,为开发者们提供了解决问题的智慧和指导。
抽象工厂模式是一种创建型设计模式,它为创建一组相关或相互依赖的对象提供了一个抽象的接口,而不需要明确指定它们的具体类。
这个模式的主要目标是向客户端提供一个接口,以便客户端能够在不必指定具体产品的情况下,创建属于不同产品族的产品对象。
抽象工厂模式的关键特点包括:
抽象工厂模式提供了一种灵活的方式来处理对象的创建,使得系统更容易维护和扩展。它的核心思想是将产品的创建抽象化,使客户端不必关心具体的产品类,而只需依赖于抽象工厂接口。这有助于实现多态性、符合开闭原则,并支持创建多个相关产品族的对象。
抽象工厂模式(Abstract Factory Pattern)中的抽象工厂(Creator)是一个关键的概念,它在这个设计模式中扮演着重要的角色。以下是抽象工厂的概念和作用:
抽象工厂模式中的抽象工厂充当了产品创建的中心,它定义了一组抽象方法,每个方法对应一个产品的创建操作。具体的工厂类实现了这些方法,根据不同的需求创建具体的产品对象。这种结构使得系统更加灵活,能够轻松应对不同种类或族类产品的需求。
抽象工厂模式(Abstract Factory Pattern)中的具体工厂(Concrete Creator)是实现抽象工厂接口的具体类,它扮演了一种关键的角色。以下是具体工厂的概念和作用:
具体工厂是抽象工厂模式中的具体实现,它们实现了抽象工厂接口中定义的方法,根据不同的产品族创建具体的产品对象。通过具体工厂,客户端代码可以方便地获取所需的产品对象,同时不需要了解具体产品类的实现细节。这种结构使得抽象工厂模式能够有效地支持创建不同产品族的对象,并帮助实现系统的松耦合。
抽象工厂模式(Abstract Factory Pattern)中的抽象产品(Abstract Product)是定义了一组相关产品的抽象类或接口,它在这个设计模式中具有重要的概念和作用。以下是抽象产品的概念和作用:
抽象产品是抽象工厂模式中的核心概念之一,它定义了一组相关产品的通用接口,具有高度的抽象性,不包含具体的实现细节。抽象产品的存在有助于实现客户端与产品的解耦,并支持创建不同产品族的对象。通过使用抽象产品,设计模式能够提供更灵活、可扩展和可维护的系统结构。
抽象工厂模式(Abstract Factory Pattern)中的具体产品(Concrete Product)是抽象产品(Abstract Product)的具体实现,它表示一组相关产品中的一个具体实例。以下是具体产品的概念和作用:
具体产品是抽象工厂模式中的具体实现,它们实现了抽象产品定义的接口或抽象类,并提供了产品的具体实现细节。具体产品的存在使得客户端能够创建和操作不同种类的产品对象,同时不需要了解具体产品类的细节,从而实现了高度的抽象和解耦。这种结构使得抽象工厂模式能够轻松支持创建不同产品族的对象,从而满足不同的需求。
命名空间AbstractFactory中包含手机基类MobilePhone、便携式设备基类Tablet和计算机基类Computer,以及它们对应的6个实现类。抽象设备工厂类DeviceFactory包含2个实现类中国工厂ChineseFactory类和美国工厂AmericanFactory类。在智能设备竞争如此激烈的今天,我将尝试用2个不同的工厂来生产一批智能设备,以使大家能够了解抽象工厂模式的正确使用方法。
public abstract class MobilePhone {
public abstract void Print();
}抽象手机类MobilePhone,产品族中的一员。
public class ApplePhone : MobilePhone {
public override void Print() {
Console.WriteLine("Apple Phone is created by American Factory!");
}
}苹果手机实现类ApplePhone,具体的产品。
public class HuaWeiPhone : MobilePhone {
public override void Print() {
Console.WriteLine("HuaWei Phone is created by Chinese Factory!");
}
}华为手机实现类HuaWeiPhone,具体的产品。
public abstract class Computer {
public abstract void Print();
}抽象计算机类Computer,产品族中的一员。
public class DellComputer : Computer {
public override void Print() {
Console.WriteLine("Dell Computer is created by American Factory!");
}
}戴尔计算机实现类DellComputer,具体的产品。
public class LenovoComputer : Computer {
public override void Print() {
Console.WriteLine("Lenovo Computer is created by Chinese Factory!");
}
}联想计算机实现类LenovoComputer,具体的产品。
public abstract class Tablet {
public abstract void Print();
}抽象便携式设备类Tablet,产品族中的一员。
public class Nexus10 : Tablet {
public override void Print() {
Console.WriteLine("Nexus10 is created by American Factory!");
}
}Nexus10便携式设备实现类Nexus10,具体的产品。
public class XiaoMiPad : Tablet {
public override void Print() {
Console.WriteLine("XiaoMiPad is created by Chinese Factory!");
}
}小米平板便携式设备实现类XiaoMiPad,具体的产品。
public abstract class DeviceFactory {
public abstract MobilePhone CreateMobilePhone();
public abstract Computer CreateComputer();
public abstract Tablet CreatePad();
}智能设备生产工厂基类,它定义了一个产品族的生成接口,这是区别于工厂方法模式的主要模块。
public class AmericanFactory : DeviceFactory {
public override MobilePhone CreateMobilePhone() {
return new ApplePhone();
}
public override Computer CreateComputer() {
return new DellComputer();
}
public override Tablet CreatePad() {
return new Nexus10();
}
}美国工厂类AmericanFactory,是一个具体的智能设备生产工厂。
public class ChineseFactory : DeviceFactory {
public override MobilePhone CreateMobilePhone() {
return new HuaWeiPhone();
}
public override Computer CreateComputer() {
return new LenovoComputer();
}
public override Tablet CreatePad() {
return new XiaoMiPad();
}
}中国工厂类ChineseFactory,是一个具体的智能设备生产工厂。
public class CreateDevice<T> where T : DeviceFactory {
private static T _deviceFactory = null;
public static void Create() {
_deviceFactory = Activator.CreateInstance<T>();
_deviceFactory.CreateMobilePhone().Print();
_deviceFactory.CreateComputer().Print();
_deviceFactory.CreatePad().Print();
}
}一个辅助类,帮助我生产智能设备并向命令行输出结果。
public class Program {
public static void Main(string[] args) {
CreateDevice<ChineseFactory>.Create();
CreateDevice<AmericanFactory>.Create();
Console.ReadKey();
}
}以上是调用方的代码,以下是这个案例的输出结果:
HuaWei Phone is created by Chinese Factory!
Lenovo Computer is created by Chinese Factory!
XiaoMiPad is created by Chinese Factory!
Apple Phone is created by American Factory!
Dell Computer is created by American Factory!
Nexus10 is created by American Factory!抽象工厂模式(Abstract Factory Pattern)具有多个优点,这些优点使它成为一种有力的设计模式,特别适用于需要创建一组相关对象的情况。以下是抽象工厂模式的主要优点:
抽象工厂模式通过提供一种抽象的产品创建机制,支持创建一组相关对象,提高了系统的抽象性、灵活性、可维护性,并降低了代码之间的耦合度。这使得它在需要处理多个相关对象的场景中非常有用。
抽象工厂模式(Abstract Factory Pattern)虽然有许多优点,但也存在一些缺点,需要在使用时考虑。以下是抽象工厂模式的主要缺点:
抽象工厂模式在需要处理一组相关产品的情况下非常有用,但也需要权衡其复杂性和灵活性。在设计时,需要仔细考虑是否真正需要使用抽象工厂模式,以及是否存在更简单的设计模式来满足需
抽象工厂模式(Abstract Factory Pattern)适用于以下情况,特别是在需要创建一组相关的产品对象并确保它们之间的一致性时:
抽象工厂模式适用于需要创建一组相关产品、需要保持产品一致性、需要将产品的创建和使用分离以及需要支持多种不同产品族的情况。它是一种有力的设计模式,特别适用于图形用户界面库、数据库驱动程序、操作系统抽象等需要处理一组相关对象的应用中。