抽象工厂模式,加工出不可思议的产品!
大家好,我是洪爵,今天又是设计模式的一天!
之前我们有谈论过工厂模式,那么抽象工厂模式又是什么呢?其实可以简单的概括:工厂模式,是工厂加工出对应的产品;而抽象工厂模式是专门生产工厂的,每个工厂又可以制造自己的产品(有点俄罗斯套娃)。
抽象工厂模式是属于创建型的模式,创建型模式即提供一种最佳的创建对象方式。
抽象工厂模式其实和工厂模式有点类似,我把文章都贴出来了。大家可以对照着看下,我理解大家理解了工厂模式,那么抽象工厂模式其实就是一个模子刻出来的东西。
类图:
我们创建出一个AbstractFactory类,做抽象工厂,每一个工厂都需要去实现这个抽象工厂类,生产这个共产的是FactoryProducer类,根据你的需求返回对应的工厂,每个工厂能生产自己的产品族,这些产品族又是具体实现某一个interface。
上代码:
// AbstractFactory.java
public abstract class AbstractFactory {public abstract Computer getComputer(String computer);public abstract Phone getPhone(String phone);
}// ComputerFactory.java
public class ComputerFactory extends AbstractFactory {public Computer getComputer(String computer) {if(null == computer) {return null;}if("LENOVE".equalsIgnoreCase(computer)) {return new LENOVE();} else if("ASUS".equalsIgnoreCase(computer)) {return new ASUS();}return null;}public Phone getPhone(String phone) {return null;}
}// PhoneFactory.java
public class PhoneFactory extends AbstractFactory {public Computer getComputer(String computer) {return null;}public Phone getPhone(String phone) {if(null == phone) {return null;}if("HUAWEI".equalsIgnoreCase(phone)) {return new HUAWEI();} else if("ZTE".equalsIgnoreCase(phone)) {return new ZTE();}return null;}
}// FactoryProducer.java
public class FactoryProducer {public static AbstractFactory getFactory(String factory) {if("PHONE".equalsIgnoreCase(factory)) {return new PhoneFactory();} else if("COMPUTER".equalsIgnoreCase(factory)) {return new ComputerFactory();}return null;}
}// Phone.java
public interface Phone {void printPhoneName();
}//ZTE.java
public class ZTE implements Phone {public void printPhoneName() {System.out.println("中兴手机");}
}// HUAWEI.java
public class HUAWEI implements Phone {public void printPhoneName() {System.out.println("华为手机");}
}// Computer.java
public interface Computer {void printComputerName();
}// ASUS.java
public class ASUS implements Computer {public void printComputerName() {System.out.println("华硕电脑");}
}// LENOVE.java
public class LENOVE implements Computer {public void printComputerName() {System.out.println("联想电脑");}
}//Client.java
public class Client {public static void main(String[] args) {// 获取手机工厂AbstractFactory phoneFactory = FactoryProducer.getFactory("PHONE");// 手机工厂生产对应品牌手机Phone huawei = phoneFactory.getPhone("HUAWEI");huawei.printPhoneName();Phone zte = phoneFactory.getPhone("ZTE");zte.printPhoneName();// 获取电脑工厂AbstractFactory computerFactory = FactoryProducer.getFactory("COMPUTER");// 电脑工厂生产对应品牌电脑Computer lenove = computerFactory.getComputer("LENOVE");lenove.printComputerName();Computer asus = computerFactory.getComputer("ASUS");asus.printComputerName();}
}
/*
华为手机
中兴手机
联想电脑
华硕电脑
*/
本章节有关于抽象工厂模式的内容就到这里啦!希望对你有帮助哦~
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。
道阻且长,往事作序,来日为章。
期待我们下一次相遇!
抽象工厂模式,加工出不可思议的产品!相关推荐
- 设计模式---4(抽象工厂模式的概念,产品组和产品等级的概念,抽象工厂模式的实现)
抽象工厂模式 抽象工厂模式的概念 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向 客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品 族的产 ...
- 【设计模式】抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )
文章目录 一.抽象工厂模式简介 二.抽象工厂模式适用场景 三.抽象工厂模式优缺点 四.产品等级结构和产品族 五.抽象工厂模式代码示例 1.冰箱抽象类 2.美的冰箱实现类 3.格力冰箱实现类 4.空调抽 ...
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...
- Java设计模式-工厂方法模式和抽象工厂模式
工厂方法模式定义: 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)."一对一"的关系 1,一抽象工厂类派生出多个具体工厂类: 2, ...
- 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- 系统架构技能之设计模式-抽象工厂模式
一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...
- 对设计模式的总结之工厂方法模式和抽象工厂模式
前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓 ...
- 设计模式(三):旅行的角度理解抽象工厂模式
之前的文章介绍了工厂模式,这篇文章介绍工厂模式的强化版本抽象工厂模式(Abstract Factory Pattern) . 我们知道工厂模式是用于在延迟创建具体的对象,抽象工厂模式可以看作是面向工厂 ...
- 【软件设计模式】工厂模式(简单工厂模式、一般工厂模式、抽象工厂模式)
概述: 工厂模式把对象的创建交由某个特定的类来实现,该类为工厂类,该类的方法称为工厂方法,仅仅负责创建对象,从而将客户端复杂的对象创建语句实现解耦.责任分离,方便扩展和维护. 分类: 工厂模式分为简单 ...
- 23种设计模式——抽象工厂模式
目录 抽象工厂模式(AbstractFactory) 产品族 理解 UML图 优缺点 应用场景 抽象工厂模式VS和工厂模式 实例 数据访问(工厂方法) 数据访问(抽象工厂) 用简单工厂改造抽象工厂 C ...
最新文章
- fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
- linux ftp图片服务器,linux ftp 图片服务器
- Storm 06_Storm 容错机制
- SAP UI5 初学者教程之六 - 了解 SAP UI5 的模块(Module)概念试读版
- git中reset与revert的区别
- 【Web】JavaWeb开发技术笔记整理
- ag-grid 表格中添加图片
- java并发AtomicReference
- 业界红包玩法与技术方案总结
- OpenCV3的GPU模块编译
- 欲报从速,已有56所高校选择云创大学高质量免费直播授课!
- E - Stripies
- MSP430如何使用energia(TI公司的arduino简易编译器)
- 关于VMWare Data Protection VDP的使用心得
- 反种族主义算法的偏见与警务简介
- 灌水滴~~ 讨论下怎样用电脑上手机3GQQ的西游
- TZOJ 7034: 竹取飞翔 ~ Lunatic Princess 并查集+数学。
- 每日站立会议个人博客(冲刺周)-Saturday
- linux下不解包查看tar包文件内容
- 【每日一题】027 奇妙的数字
热门文章
- 学生专用计算机abs什么意思,出现abs标志什么意思
- java物联网第三天 智慧农业物联网
- ubuntu系统清理垃圾
- 《墨菲定律》读书笔记之第一章——成功学的秘密
- 成功解决We recommend that if you want Anaconda registered as your system Python, you unregister this Pyt
- 电脑系统能ping通但不能上网怎么办
- oracle按相同年份_英语表达方式有几个类型,时间和日期表达都是不相同的
- sping循环依赖:but has eventually been wrapped. This means that said other beans do not use the final
- 外贸常用术语_常用外贸术语大全
- 计算机爱情诗,优美诗句大全