Java 实现抽象工厂模式
抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:详细的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现详细功能,或派生
类图
- //抽象产品1
- public interface IProduct1 {
- public void show();
- }
- //抽象产品2
- public interface IProduct2 {
- public void show();
- }
- //实体产品1
- public class Product1 implements IProduct1 {
- public void show() {
- System.out.println("创建了1型产品");
- }
- }
- //实体产品2
- public class Product2 implements IProduct2 {
- public void show() {
- System.out.println("创建了2型产品");
- }
- }
- /*
- * 1A 1B属于Product1 同一产品等级结构中
- * 2A 2B属于Product2
- */
- public class GradeProduct1A extends Product1 {
- @Override
- public void show() {
- super.show();
- System.out.println("这是产品1下的:产品A");
- }
- }
- public class GradeProduct1B extends Product1 {
- @Override
- public void show() {
- super.show();
- System.out.println("这是产品1下的:产品B");
- }
- }
- public class GradeProduct2A extends Product2 {
- @Override
- public void show() {
- super.show();
- System.out.println("这是产品2下的:产品A");
- }
- }
- public class GradeProduct2B extends Product2 {
- @Override
- public void show() {
- super.show();
- System.out.println("这是产品2下的:产品B");
- }
- }
- //抽象工厂 创建不同的抽象产品
- public interface IFactory {
- public IProduct1 createProduct1A();//1类产品 型号A
- public IProduct1 createProduct1B();//1类产品 型号B
- public IProduct2 createProduct2A();//2类产品 型号A
- public IProduct2 createProduct2B();//2类产品 型号B
- }
- //实体工厂 创建实体产品,返回类型为抽象产品
- public class Factory implements IFactory {
- public IProduct1 createProduct1A() {
- return new GradeProduct1A();
- }
- public IProduct1 createProduct1B() {
- return new GradeProduct1B();
- }
- public IProduct2 createProduct2A() {
- return new GradeProduct2A();
- }
- public IProduct2 createProduct2B() {
- return new GradeProduct2B();
- }
- }
- /*
- * 抽象工厂模式:用来创建一组相关或者相互依赖的对象
- *
- * 流程:抽象工厂,实体工厂 生产产品
- * 抽象产品。实体产品 实现产品功能
- * 缺点:当须要添加一个产品(由抽象和实体构成)。工厂都须要更改
- */
- public class Test4Abstract {
- public static void main(String[] args) {
- IFactory factory = new Factory();
- IProduct1 product1a = factory.createProduct1A();
- product1a.show();
- IProduct1 product1b = factory.createProduct1B();
- product1b.show();
- IProduct2 product2a = factory.createProduct2A();
- product2a.show();
- IProduct2 product2b = factory.createProduct2B();
- product2b.show();
- }
- }
Java 实现抽象工厂模式的更多相关文章
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- Java设计模式-抽象工厂模式(Abstract Factory )
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- java 之 抽象工厂模式(大话设计模式)
看了几次抽象工厂模式,每次查看都需要重新理解一次,可能是涉及的类和接口比较多,所以比较难缕清的关系吧!在笔者看来,我们还是要吸取其思想而不是生搬硬套. 来看下类图: 大话设计模式-类图 看类图已经很乱 ...
- 2.java设计模式-抽象工厂模式
抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...
- Java设计模式-抽象工厂模式(Abstarct Factory)
抽象工厂模式 举个生活中常见的例子,组装电脑,在组装电脑时,通常需要选择一系列的配件,比如CPU,硬盘,内存,主板,电源,机箱等,为了讨论使用简单,值考虑选择CPU和主板的问题. 事实上,在选择CPU ...
- Java设计模式——抽象工厂模式
抽象工厂模式也是创建模式,可以把它理解成创建工厂的工厂,这种模式也是我们经常使用的.在抽象工厂中的接口是用来创建工厂的,每个生成的工厂又都可以按照工厂模式创建其他对象. 举例说明: 创建Shape接口 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
随机推荐
- css3 动画 vs js 动画
之前被问到过,css3 动画与 js 动画孰优孰劣,脑袋的第一反应就是性能上肯定 css3 动画会好很多,但别人说不对,我就在想,不对?难道还有别的原因吗?答案是肯定的.先来看看二者实现动画的原理吧. ...
- 利用eclipse调试JDK源码
先看效果图 综合网上各种教程,总结如下 新建 D:/jdk/src .D:/jdk/debug 目录 src存放源码 debug存放编译结果 将 %JAVA_HOME%/src.zip 解压到 D:/ ...
- java设计模式之单例模式总结
面试手写单例模式(通用版)
- 【译】x86程序员手册28-7.7任务地址空间
7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...
- linux使用crontab实现PHP执行计划定时任务
linux使用crontab实现PHP执行计划定时任务 前几天写过一篇文章,利用单纯的php实现定时执行任务,但是效率不佳,对于linux来说用crontab实现更加合理 首先说说cron,它是一个l ...
- C/C++ char*、char[]
一.本质区别 char* s是一个保存字符串首地址的指针变量,char a[]是许多连续的内存单元,单元中的元素为char类型.之所以用char *能达到char []的效果,还是字符串的本质,即给你 ...
- 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet(转载)
若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet 请将 J ...
- Linux学习笔记记录(四)
- Placing Lampposts
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91212#problem/E #include <iostream> #inc ...
- codechef营养题 第二弹
第二弾が始まる! codechef problems 第二弹 一.Backup Functions 题面 One unavoidable problem with running a restaura ...