设计模式篇03-抽象工厂模式
1.关系类图
2.抽象工厂模式
定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一个等级结构的产品,而抽象工厂模式可以生产多个等级产品使用抽象工厂模式一般需要满足一下条件: 1)系统中有多个产品族,每个具体工厂创建一组但属于不同等级结构的产品.2)系统一次只能消费某一族的产品,即同族产品一起使用优点:1)可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理2)当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。3)抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度
3.代码实现
//抽象产品:动物类
public interface Animal {public void show();
}//抽象产品:植物类
public interface Plant {public void show();
}//抽象工厂:农场类
public interface Farm {public Animal productAnimal();public Plant productPlant();
}//公共基类
public class Basic {public Basic(String name) {this.name = name;}public Basic() {}private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}//具体动物类1
public class Cattle extends Basic implements Animal {public Cattle(String name){super(name);}@Overridepublic void show() {System.out.println("我是:"+this.getName());}
}//具体动物类2
public class Horse extends Basic implements Animal {public Horse(String name){super(name);}@Overridepublic void show() {System.out.println("我是:"+this.getName());}}//具体植物类1
public class Vegetables extends Basic implements Plant {public Vegetables(String name){super(name);}@Overridepublic void show() {System.out.println("我是:"+this.getName());}
}//具体植物类2
public class Fruitage extends Basic implements Plant {public Fruitage(String name){super(name);}@Overridepublic void show() {System.out.println("我是:"+this.getName());}
}//具体农场类1
public class SGfarm implements Farm {@Overridepublic Animal productAnimal() {Animal animal = new Cattle("牛");return animal;}@Overridepublic Plant productPlant() {Plant plant=new Vegetables("蔬菜");return plant;}
}//具体农场类2
public class SRfarm implements Farm {@Overridepublic Animal productAnimal() {Animal animal = new Horse("马");return animal;}@Overridepublic Plant productPlant() {Plant plant=new Fruitage("水果");return plant;}
}//客户端
public static void main(String[] args) {Farm farm1=new SGfarm();Farm farm2=new SRfarm();System.out.println("农场1------>");Animal animal = farm1.productAnimal();Plant plant = farm1.productPlant();animal.show();plant.show();System.out.println("农场2------>");Animal animal1 = farm2.productAnimal();Plant plant1 = farm2.productPlant();animal.show();plant1.show();}
设计模式篇03-抽象工厂模式相关推荐
- 从零开始学习Java设计模式 | 创建型模式篇:抽象工厂模式
在本讲,我们来学习一下创建型模式里面的第三个设计模式,即抽象工厂模式. 前言 前面介绍的工厂方法模式中考虑的是一类产品,如畜牧场只养动物.电视机厂只生产电视机(不生产空调.冰箱等其它的电器).计算机学 ...
- 设计模式C#描述——抽象工厂模式
设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...
- 设计模式二、抽象工厂模式
设计模式part2 1. 抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...
- JavaScript 23 种设计模式之 4 抽象工厂模式
JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...
- JavaScript 设计模式学习第九篇- 抽象工厂模式
工厂模式 (Factory Pattern),根据输入的不同返回不同类的实例,一般用来创建同一类对象.工厂方式的主要思想是将对象的创建与对象的实现分离. 抽象工厂 (Abstract Factory) ...
- HeadFirst设计模式篇四:工厂模式
2019独角兽企业重金招聘Python工程师标准>>> 先说明:由于HeadFirst属于国外翻译过来,文中的例子过于难理解,这里根据设计模式之禅进行总结 问题引入: 女娲造人故事: ...
- 设计模式普及之抽象工厂模式
本文是读<Android源码设计模式解析与实战>后笔记 抽象工厂的定义 为创建一组相关或者是相互依赖的对象提供一个借口,而不需要指定它们的具体类. 抽象工厂的使用场景 一个对象族有相同的约 ...
- 【设计模式】之抽象工厂模式
创造性设计模式 创造型模式主要是为了实例化类所用.进一步又分为类创建.对象创建模式. 类创建模式 类创建模式主要基于继承方式进行实例化 对象创建模式 对象创建模式主要基于委托机制进行实例化 Abstr ...
- java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式
抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...
- java设计模式六(抽象工厂模式)
java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...
最新文章
- Android一键多渠道分发打包实战和解析
- java debug体系为什么不能debug到jdk里所有的代码
- 如何修改MySQL8.0.5以上版本root密码
- Hadoop基于Protocol Buffer的RPC实现代码分析-Server端--转载
- 启明云端分享| 乐鑫刚发布的 ESP32-C2与今年五月份量产的ESP32-C3有哪些不同呢?作为两颗升级替代ESP8286的芯片,我们在应用时怎么去选择呢
- aspx 修改了样式但是在点击按钮后被刷新_产品经理教程-Axure RP 9 基础操作(元件、布局、草图、样式)...
- 绘图神器 —— Graphviz dot 语言介绍
- 2018acm编程大赛题目c语言,编程竞赛题(超牛题目,留下做研究).doc
- 电子信息技术专业名词中英文对照(二)
- DSP2812 RAM不够用的解决方法【转载】
- 在线JS代码调试工具JSFiddle和JSBin、菜鸟在线编辑器
- js正则表达式匹配多个条件
- 个人网站可以申请微信授权登录吗?
- 配置flashgot+axel
- 音视频即时通讯—视频客服系统开发
- 能力天空视频下载助手
- python 期货现货差价监测_数字货币期货现货差价监控
- matlab 使用 audioread 、 sound 读取和播放 wav 文件
- 【ClickHouse】<Error> Application: Caught exception while loading metadata: Code: 231. DB::Exception
- java 牛客网之[动态规划 简单]NC3 nico和niconiconi
热门文章
- SQL Server 数据库基础笔记分享(上)
- 为什么你的电商没有流量
- macOS 10.15 Catalina 软件安装时“已损坏,无法打开,您应该将它移到废纸篓”问题的解决方法
- 【项目实践】——java异常A child container failed during start
- python路径转换为选区_Python,Linux,PS随记
- Macromedia Captivate for Windows
- IT人久坐的危害:从颈椎病到诱发猝死
- iPhone X热销 苹果做了哪些用心良苦的事儿?
- 魅族现在还有root权限吗,魅族完全root权限
- Ubuntu16.04美化桌面并设置终端背景图片