设计模式三—抽象工厂模式

一、定义

抽象工厂模式是工厂方法模式的进一步抽象。如果产品簇中只有一种产品,则退化为工厂方法模式。

二、原理图

三、代码实例

* 苹果和土豆是园丁1的杰作

* 葡萄和西红柿是园丁2的杰作

1、Fruit.java

public interface Fruit {/** 生长* 收获* 栽种*/public void grow();public void harvest();public void plant();
}

  

2、Apple.java

public class Apple implements Fruit {private int treeAge;public void grow() {System.out.println("苹果正在生长,,,");}public void harvest() {System.out.println("收获苹果");}public void plant() {System.out.println("栽种苹果");}public int getTreeAge() {return treeAge;}public void setTreeAge(int treeAge) {this.treeAge = treeAge;}}

3、Grape.java

public class Grape implements Fruit {private boolean seedless;public void grow() {System.out.println("葡萄正在生长。。。");}public void harvest() {System.out.println("收获葡萄。");}public void plant() {System.out.println("栽种葡萄。");}public boolean isSeedless() {return seedless;}public void setSeedless(boolean seedless) {this.seedless = seedless;}}

4、Vegetable.java

public interface Vegetable {/** 生长* 收获* 栽种*/public void grow();public void harvest();public void plant();
}

5、Potato.java

public class Potato implements Vegetable {public void grow() {System.out.println("土豆正在生长,,,");}public void harvest() {System.out.println("收获土豆");}public void plant() {System.out.println("栽种土豆");}}

6、Tomato.java

public class Tomato implements Vegetable {public void grow() {System.out.println("西红柿正在生长,,,");}public void harvest() {System.out.println("收获西红柿");}public void plant() {System.out.println("栽种西红柿");}}

7、Gardener.java

public interface Gardener {/** 水果园丁* 蔬菜园丁* 水果蔬菜各两种* 建立水果工厂的方法*/public Fruit factoryFruit();public Vegetable factoryVegetable();}

8、ConcreteGardener1.java

public class ConcreteGardener11 implements Gardener {//等级为1的园丁生产的水果和蔬菜/** 苹果和土豆是园丁1的杰作,或者说是一等产品* 葡萄和西红柿是园丁2的杰作,或者说是二等产品*/public Fruit factoryFruit() {return new Apple();}public Vegetable factoryVegetable() {return new Potato();}}

9、ConcreteGardener2.java

public class ConcreteGardener12 implements Gardener {//等级为2的园丁生产的水果和蔬菜/** 苹果和土豆是园丁1的杰作,或者说是一等产品* 葡萄和西红柿是园丁2的杰作,或者说是二等产品*/public Fruit factoryFruit() {return new Grape();}public Vegetable factoryVegetable() {return new Tomato();}}

10、ClientDemo

public class ClientDemo {public static void main(String[] args) {/** 苹果和土豆是园丁1的杰作,或者说是一等产品* 葡萄和西红柿是园丁2的杰作,或者说是二等产品*/Gardener gardener1=new ConcreteGardener11();Gardener gardener2=new ConcreteGardener12();Fruit apple = gardener1.factoryFruit();Vegetable potato=gardener1.factoryVegetable();Fruit grape = gardener2.factoryFruit();Vegetable tomato=gardener2.factoryVegetable();apple.plant();apple.grow();apple.harvest();potato.plant();potato.grow();potato.harvest();grape.plant();grape.grow();grape.harvest();tomato.plant();tomato.grow();tomato.harvest();}}

四、运行结果

栽种苹果

苹果正在生长,,,

收获苹果

栽种土豆

土豆正在生长,,,

收获土豆

栽种葡萄。

葡萄正在生长。。。

收获葡萄。

栽种西红柿

西红柿正在生长,,,

收获西红柿

转载于:https://www.cnblogs.com/Renyi-Fan/p/6892612.html

设计模式三—抽象工厂模式相关推荐

  1. 浅析设计模式(三)——抽象工厂模式

    抽象工厂模式(Abstract-Factory,创建型模式) 本文的结构: 一.抽象工厂模式的定义 二.抽象工厂模式的参与者及其角色 三.抽象工厂模式的类图 四.抽象工厂模式的示例 五.参考 一.抽象 ...

  2. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  3. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  4. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  5. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  6. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  7. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  8. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  9. Java 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...

最新文章

  1. webstorm设置点击(单击)左侧项目资源管理器里面的文件,自动在右侧打开源代码文件
  2. Java面向对象(9)--方法的重写(override/overwrite)
  3. GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
  4. tt服务器系统,tt服务器
  5. iQOO 8首次采用三星E5屏幕:2021年最好的手机屏幕
  6. splunk采集linux日志,splunk日志监控利器
  7. php mysql 获取排名,Mysql排序获取排名的实例代码
  8. request.getRequestDispatcher(url).forward(request, response)
  9. 反编译python编写的exe文件的详细方法
  10. iostream和stdafx.h
  11. android控制wifi,基于 Android 手机操作和控制的 Wifi 小车程序设计
  12. VS2008 安装时 出现 “加载安装组件时出现问题,取消安装” 的解决方法
  13. Java开发基础(四)——dbutils的使用
  14. HTML基础常识问答(二)
  15. 青龙脚本之-饿了么脚本
  16. Web前端学习笔记(四)--- CSS卡贴悬停展开效果
  17. 歪门邪道?新技术让智能手机可窃取附近键盘输入信息
  18. Win10_此电脑_多余项目设备和驱动器
  19. Linux 系统管理员
  20. 关于 ‘builtin_function_or_method‘ object has no attribute ‘set_colorkey‘和 No video mode has been set解释

热门文章

  1. linux 系统装中文输入法 fcitx
  2. 1-4 多文档界面处理(3)
  3. 『Tarjan算法 无向图的双联通分量』
  4. Mysql5.7使用注意事项随笔
  5. 【翻译】旧技术成就新勒索软件,Petya添加蠕虫特性
  6. 第二十三周微职位elk日志系统
  7. 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
  8. AbstractBeanDefinition:lenientConstructorResolution属性源码分析
  9. php5.3中的safe_mod与magic_quotes_gpc
  10. mapx实现热点效果