菜鸟硕枫设计模式系列之4 抽象工厂模式
发布日期:2021-10-01 08:45:05
浏览次数:1
分类:技术文章
本文共 2563 字,大约阅读时间需要 8 分钟。
抽象工厂方法模式是用途最广的方法模式之一,其主要思想是利用工厂生产组合的复杂实例组,由于工厂、不同的实例组中实例一般都抽象为接口层次,所以很方便添加不同的具体工厂和不同的实例组。主要用于创建一系列相关的对象组或是其他方面。 抽象工厂方法模式类图: [img]http://dl.iteye.com/upload/attachment/364524/5c72b240-b5e1-3407-a99a-eeeb0379a50b.jpg[/img] 具体实例demo: 建造工厂:package abstractFactory; public interface CreatorFactory { Food getFoodInstance(); Fruit getFruitInstance(); }具体工厂1:
package abstractFactory; public class ConcreteCreatorFactory1 implements CreatorFactory{ public Food getFoodInstance() { return new Bread(); } public Fruit getFruitInstance() { return new Apple(); } }具体工厂2:
package abstractFactory; public class ConcreteCreatorFactory2 implements CreatorFactory{ public Food getFoodInstance() { return new Egg(); } public Fruit getFruitInstance() { return new Pear(); } }对象接口:
package abstractFactory; public interface Food { String getFoodName(); }
package abstractFactory; public interface Fruit { String getFruitName(); }具体对象:
package abstractFactory; public class Apple implements Fruit{ @Override public String getFruitName(){ // TODO Auto-generated method stub return "This is apple"; } }
package abstractFactory; public class Bread implements Food{ @Override public String getFoodName() { // TODO Auto-generated method stub return "This is Bread which always comes out with Apple."; } }
package abstractFactory; public class Egg implements Food{ @Override public String getFoodName() { // TODO Auto-generated method stub return "This is Bread which always comes out with Apple."; } }
package abstractFactory; public class Pear implements Fruit { @Override public String getFruitName() { // TODO Auto-generated method stub return "This is pear"; } }测试类:
package abstractFactory; public class AbstractFactoryDemo { public static void main(String[]args){ CreatorFactory fac=new ConcreteCreatorFactory1(); System.out.println("ConcreteCreatorFactory1 Instance generate the following Instances"); System.out.println(fac.getFoodInstance().getFoodName()); System.out.println(fac.getFruitInstance().getFruitName()); fac= new ConcreteCreatorFactory2(); System.out.println("ConcreteCreatorFactory2 Instance generate the following Instances"); System.out.println(fac.getFoodInstance().getFoodName()); System.out.println(fac.getFruitInstance().getFruitName()); } }说明:Food接口对应类 Egg Bread;Fruit接口对应类Apple Pear.具体工厂1负责创建Bread或是Apple实例;具体工厂2负责创建Egg或是Pear实例。这样的话 如果只需要Bread或是Apple实例,就可以只用具体工厂1去实现;要另外一组的话 只需要用具体工厂2去创建。而对抽象工厂来说,它不需要关注那一个具体工厂去实现。这样的话就有了更高层次的封装,也满足了开闭原则。
转载地址:https://blog.csdn.net/iteye_2655/article/details/81970356 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年03月26日 16时52分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
481_C语言野指针
2019-04-27
482_C语言函数指针小结
2019-04-27
483_Windows Terminal中默认光标为小方块
2019-04-27
500_C语言判断一个字符是否是数字
2019-04-27
501_linux内核学习_skip_atoi函数分析
2019-04-27
503_linux内核学习_main函数分析
2019-04-27
504_linux内核学习___va_rounded_size宏分析
2019-04-27
505_linux内核学习_关于C语言函数的可变参数
2019-04-27
通过插件实现VIM编辑的自动补齐功能
2019-04-27
数学女孩儿中的数列问题
2019-04-27
使用Python计算前10000个质数表
2019-04-27
使用MATLAB加载文本数据
2019-04-27
使用MATLAB加载csv格式数据
2019-04-27
C语言换行带来的问题
2019-04-27
使用Python实现拉马努金的三角函数正弦公式
2019-04-27
使用Python求解最小公倍数
2019-04-27
Windows上实现dos命令重命名
2019-04-27
使用Python通过win32 COM接口实现Excel单元格写入
2019-04-27
使用命令行工具编译C#程序
2019-04-27
C#中的局部变量冲突
2019-04-27