定义
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体的类。
解析
比较简单的创建型模式。就是创建一系列对象,而这些对象是相互相关或者相互依赖的。
比较易懂的例子是皮肤。更换皮肤通常需要修改导航栏的样式,首页背景图等。假设这些样式封装在三个不同的对象中,对象导航栏和对象首页。如下UML
(为了让画图简单这里UML只分两个部分)
Widget中文名即窗口组件。
客户端是Client,其中调用的是WidgetFactory接口和Index接口,Navigation接口。
而WidgetFactory接口有两个实现类,分别是蓝色组件和黑色组件,因为接口规定了创建首页index和创建导航栏navigation两个方法,所以对应的两个工厂实现类也有两个对应创建方法,分别是创建自己工厂对应样式的组件。
创建的对应实现类也有对应的接口。就是黑色组件创建的导航和首页必须实现index接口和navigation接口。
这样如果在调用端需要修改组件样式的话,只需要在声明工厂的地方切换实现类即可。也就是切换皮肤。
这里要注意的是,对应的工厂实现类实例通常是单例的,因为整个进程中通常只需要一个工厂实例就够了。而产品是否单例要看实际情况。
将场景一般化就是如下UML
定义了
一个抽象工厂接口
抽象接口的两个(实际场景里可能是多个)实现类。
两个(多个)产品接口
工厂实现类中的具体产品
和调用工厂的客户端
效果
- 抽象与实现分离。
- 让有相关性的产品关联起来,容易管理。
- 如果需要切换产品实现在工厂里修改即可比较容易修改。
总结
和标题一样,如果每张桌子固定要上几类菜,如几个炒菜几份汤之类的,要川菜就把实现类换成川菜,那这些上的就是川菜,如果要换粤菜就换粤菜,这样的话菜的配置不变,但是都换成粤菜系的。
实际应用中当你需要创建一系列相关的对象的时候就可以考虑抽象工厂模式。
共同学习,写下你的评论
评论加载中...
作者其他优质文章