欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 三、创建型(抽象工厂模式)

三、创建型(抽象工厂模式)

2024/10/25 16:25:45 来源:https://blog.csdn.net/xiaoqi270620903/article/details/142827306  浏览:    关键词:三、创建型(抽象工厂模式)

抽象工厂模式

概念
抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式通常用于处理一组产品对象的创建,确保每个产品的组合是一致的。


应用场景

  1. 产品系列:当系统需要创建多个相关产品的实例时,例如在图形用户界面中可能需要按钮、文本框和滚动条。
  2. 跨平台应用:在不同平台上提供不同的实现,确保一致的接口和风格。
  3. 系统扩展:在不改变现有代码的情况下,添加新产品系列时,只需实现新的工厂。
  4. 配置管理:根据不同的配置文件加载不同的产品系列。

注意点

  • 复杂性:抽象工厂模式的引入可能增加系统复杂性,需要明确产品系列的设计。
  • 接口的设计:设计良好的接口非常重要,以便扩展和维护。
  • 新产品的引入:增加新产品时,需要更新抽象工厂及其所有具体工厂,可能会影响现有代码。

核心要素

  1. 抽象工厂:定义创建一系列产品的方法。
  2. 具体工厂:实现抽象工厂,负责创建具体产品。
  3. 抽象产品:定义产品的接口。
  4. 具体产品:实现抽象产品的具体类。

Java代码示例

// 抽象产品
interface Button {void paint();
}interface Checkbox {void paint();
}// 具体产品
class WindowsButton implements Button {@Overridepublic void paint() {System.out.println("绘制 Windows 按钮");}
}class WindowsCheckbox implements Checkbox {@Overridepublic void paint() {System.out.println("绘制 Windows 复选框");}
}class MacButton implements Button {@Overridepublic void paint() {System.out.println("绘制 Mac 按钮");}
}class MacCheckbox implements Checkbox {@Overridepublic void paint() {System.out.println("绘制 Mac 复选框");}
}// 抽象工厂
interface GUIFactory {Button createButton();Checkbox createCheckbox();
}// 具体工厂
class WindowsFactory implements GUIFactory {@Overridepublic Button createButton() {return new WindowsButton();}@Overridepublic Checkbox createCheckbox() {return new WindowsCheckbox();}
}class MacFactory implements GUIFactory {@Overridepublic Button createButton() {return new MacButton();}@Overridepublic Checkbox createCheckbox() {return new MacCheckbox();}
}// 客户端
public class Client {public static void main(String[] args) {GUIFactory factory;String osType = "Windows"; // 可以动态决定if (osType.equals("Windows")) {factory = new WindowsFactory();} else {factory = new MacFactory();}Button button = factory.createButton();Checkbox checkbox = factory.createCheckbox();button.paint();checkbox.paint();}
}

各种变形用法

  1. 扩展的抽象工厂
    当需要扩展产品系列时,可以创建新的抽象工厂。

    interface AdvancedGUIFactory extends GUIFactory {Slider createSlider();
    }
    
  2. 链式工厂
    通过将工厂的创建逻辑封装到链中,按需创建产品。

    class ChainFactory implements GUIFactory {private GUIFactory nextFactory;public void setNextFactory(GUIFactory nextFactory) {this.nextFactory = nextFactory;}@Overridepublic Button createButton() {return nextFactory.createButton();}@Overridepublic Checkbox createCheckbox() {return nextFactory.createCheckbox();}
    }
    
  3. 动态工厂选择
    根据环境或配置动态选择具体工厂。

    class DynamicFactory {public static GUIFactory getFactory(String type) {if (type.equals("Windows")) {return new WindowsFactory();} else {return new MacFactory();}}
    }
    

这些是抽象工厂模式的基本知识和变形用法!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com