设计模式三—抽象工厂模式
设计模式三—抽象工厂模式
一、定义
抽象工厂模式是工厂方法模式的进一步抽象。如果产品簇中只有一种产品,则退化为工厂方法模式。
二、原理图
三、代码实例
* 苹果和土豆是园丁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
设计模式三—抽象工厂模式相关推荐
- 浅析设计模式(三)——抽象工厂模式
抽象工厂模式(Abstract-Factory,创建型模式) 本文的结构: 一.抽象工厂模式的定义 二.抽象工厂模式的参与者及其角色 三.抽象工厂模式的类图 四.抽象工厂模式的示例 五.参考 一.抽象 ...
- 设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...
- C#设计模式(4)——抽象工厂模式
C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...
- 设计模式系列·抽象工厂模式
前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...
- 设计模式复习-抽象工厂模式
设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- 设计模式-04抽象工厂模式
设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
最新文章
- webstorm设置点击(单击)左侧项目资源管理器里面的文件,自动在右侧打开源代码文件
- Java面向对象(9)--方法的重写(override/overwrite)
- GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
- tt服务器系统,tt服务器
- iQOO 8首次采用三星E5屏幕:2021年最好的手机屏幕
- splunk采集linux日志,splunk日志监控利器
- php mysql 获取排名,Mysql排序获取排名的实例代码
- request.getRequestDispatcher(url).forward(request, response)
- 反编译python编写的exe文件的详细方法
- iostream和stdafx.h
- android控制wifi,基于 Android 手机操作和控制的 Wifi 小车程序设计
- VS2008 安装时 出现 “加载安装组件时出现问题,取消安装” 的解决方法
- Java开发基础(四)——dbutils的使用
- HTML基础常识问答(二)
- 青龙脚本之-饿了么脚本
- Web前端学习笔记(四)--- CSS卡贴悬停展开效果
- 歪门邪道?新技术让智能手机可窃取附近键盘输入信息
- Win10_此电脑_多余项目设备和驱动器
- Linux 系统管理员
- 关于 ‘builtin_function_or_method‘ object has no attribute ‘set_colorkey‘和 No video mode has been set解释
热门文章
- linux 系统装中文输入法 fcitx
- 1-4 多文档界面处理(3)
- 『Tarjan算法 无向图的双联通分量』
- Mysql5.7使用注意事项随笔
- 【翻译】旧技术成就新勒索软件,Petya添加蠕虫特性
- 第二十三周微职位elk日志系统
- 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
- AbstractBeanDefinition:lenientConstructorResolution属性源码分析
- php5.3中的safe_mod与magic_quotes_gpc
- mapx实现热点效果