设计模式之第2章-抽象工厂模式(Java实现)
设计模式之第2章-抽象工厂模式(Java实现)
“上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求。”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真的!)。
福利:工厂方法模式之应用场景
各位好,说起来应用场景,那简直是项目处处有工厂方法啊~虽然这么说有点大言不惭,但是真的是使用率超级高的说。
- 当一个类不知道它所必须创建的对象的类的时候。
- 当一个类希望由它的子类来指定它所创建的对象的时候。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
好了,我要讲的就这么多,接下来的时间就交给我老婆了。(掌声雷动~)
抽象工厂模式之自我介绍
大家好,今天由我来带领大家领略一下抽象工厂模式,恩,其实人家也是一种比较常用的模式啦,有关我的定义是:Provide an interface for creating families of related or dependent objecets without specifying their concrete classes.“老公,给翻译一下呗。“啊?哦,好的。”(作者按:秀恩爱,死的。。。喂,我还没说完呐。被毫无尊严拖走的作者)。这句的意思是为创建一组相关或者相互依赖的对象提供一个接口,而且无须指定它们的具体类。
抽象工厂模式的通用类图如下所示:

我呐,其实就是我老公的升级版了,在有多个业务品种、业务分类的时候,就轮到我登场了~好了,基本情况就是酱紫了。我要回去做饭了。“哎,老婆,别走,这样不行的,你还要讲解一下具体的实现,要不然他们不懂的。“可是,可是臣妾做不到啊。“很简单的,你只要这样,这样,然后这样,就可以了。“我读书少,老公你不要骗我。不然,哼哼~”
抽象工厂模式之具体实现
上次鱼哥说做的东西品种太少,吃多了就吃腻了,所以,这次就多来几个品种,对了,上次老公的好多东西没用完,看看能不能尽量的废物利用,勤俭持家的传统美德还是要保持的~
public interface Food{
public void createFood();
//每种吃的都有品牌与种类
public void getBrand();
}
食物有两种抽象类,一种是糖葫芦,一种是辣条。下面的代码分别是糖葫芦和辣条的实现类:
public abstract class AbstractTanghulu implements Food{
public void createFood(){
System.out.println("我是好吃的糖葫芦~");
}
}
public abstract class AbstractLatiao implements Food{
public void createFood(){
System.out.println("我是好吃的辣条~");
}
}
每个抽象类还有两个实现类,分别是实现公共的细节具体的事情,也就是那些个食物的牌子,下面我就以糖葫芦为例进行实现,辣条的也就是类似了:
public class OldPekingTanghulu extends AbstractTanghulu{
public void getBrand(){
System.out.println("老北京糖葫芦~");
}
}
这个是糖葫芦的具体实现类,显示了它的牌子是老北京的,最有名的糖葫芦~之一了。
public class TianjinTanghulu extends AbstractTanghulu{
public void getBrand(){
System.out.println("天津糖葫芦~");
}
}
这个呢,自然就是天津的糖葫芦了,天津也算是一个好地方啊,好玩的好听的天津相声~还有鱼哥,也是我们的最爱,天津麻花~好了,有关食物的类已经实现了,接下来就是制造糖葫芦以及辣条的“工厂”的具体实现了首先就是生产糖葫芦和辣条的接口了:
public interface FoodFactory{
//生产糖葫芦
public Food createTanghulu();
//生产辣条
public Food createLatiao();
}
接下来能否生产真正的糖葫芦以及辣条就看这一步了,首先是生产老北京糖葫芦的实现类:
public class OldPekingFactory implements FoodFactory{
//生产老北京糖葫芦
public Food createOldPeking();
}
接下来就是生产天津糖葫芦的实现类(由于比较懒,所以就只实现了糖葫芦的,至于辣条的,你们这么聪明,自然会写的了):
public class OldPekingFactory implements FoodFactory{
//生产天津糖葫芦
public Food createTianjin();
}
到此就完成了实现,想不想来尝尝两种糖葫芦有什么不同以及哪个比较好吃吗?不用说也知道你们想的,所以就来个测试类来做点糖葫芦来吃,不然作者又要吐槽了,下面的就是测试类,用于生产两种糖葫芦的:
public class Y{
public static void main(String[] args) {
//生产老北京牌的糖葫芦
FoodFactory peckingFactory = new OldPekingFactory();
//生产天津牌的糖葫芦
FoodFactory tianjinFactory = new TianjinFactory();
Food pekingFood = peckingFactory.createTanghulu();
Food tianjinFood = tianjinFactory.createTanghulu();
System.out.println("生产老北京牌的糖葫芦");
pekingFood.createFood();
pekingFood.getBrand();
System.out.println("生产天津牌的糖葫芦");
tianjinFood.createFood();
tianjinFood.getBrand();
}
}
“老婆,赶紧的,我饿了。“来了来了,走回去给你做吃的。”这对小夫妻,又秀恩爱~(PS:作者慢悠悠的从后面走来了)。好了,这次的就到这里了。“哎,好像缺点什么来着,缺点什么呢?”(抽象工厂模式:哎呀,老公,我忘了说应用场景了啊~~~工厂方法模式:有么?没有把。先好好做饭吧,饿死了啊、、、)欲知后事如何,且听下回分解。
PS:本博客欢迎转发,但请注明博客地址及作者~
博客地址:http://www.cnblogs.com/voidy/
博客新址:http://voidy.net
<。)#)))≦
设计模式之第2章-抽象工厂模式(Java实现)的更多相关文章
- 第3章 抽象工厂模式(Abstract Factory)
原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库 SqlServer 跟Oracle数据库 并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...
- 设计模式之第12章-享元模式(Java实现)
设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...
- 设计模式之第19章-中介者模式(Java实现)
设计模式之第19章-中介者模式(Java实现) “测试妹纸找你,你的代码出问题了.”“美工妹纸让你看看界面怎么样.”身为程序员总要和各种人打交道,但是如果再分为前端.后端工程师的话,那么关系就会错综复 ...
- 设计模式之第13章-职责链模式(Java实现)
设计模式之第13章-职责链模式(Java实现) “请假都那么麻烦,至于么.”“咋的了?”“这不快过年了么,所以我想早两天回去,准备一下,买买东西什么的,然后去给项目经理请假,但是他说快过年了,所以这个 ...
- 大话设计模式C++实现-第15章-抽象工厂模式
一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...
- C#设计模式学习笔记:(3)抽象工厂模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...
- 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)
今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
- C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)
概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...
随机推荐
- python之__init__使用方法
定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化.比如:class testClass: def __init__(self ...
- ASP.NET MVC网站学习问题积累(一)
最近工作压力比较大,不得已开始自学C#.同时网站开发业务开展迫在眉睫,只能先从ASP.NET学起.回想一下,连C#和ASP.NET的关系都没有明白,就被赶鸭子上架了...我觉得这将是我工作以来最具有戏 ...
- CSS样式表优化
前几天公司要模仿一家客户的网站模板来为另一客户新建一个模板,说白了就是换个数据源,然后样式表再小修小改一下就行了.但通过浏览器控制台下载素材时,发现这个网站开发的挺专业的,单就样式表而言,代码工整,注 ...
- OpenLayers学习笔记2——坐标转换问题
参照别人的添加marker的demo来改造时,发现无论怎样更改经纬度,都是停留在同一个位置.过了一两天突然想起可能是坐标参考的问题,尝试搜了一下,果然是这个问题.问题是这样子的: WMTS中地图的坐标 ...
- PMBOK(第六版) PMP笔记——第十章(项目沟通管理)
PM 大多数时间都用在与干系人的沟通上.第十章有三个过程: 规划沟通管理:根据干系人的需求,制定沟通管理计划管理沟通:根据沟通管理计划发布.收集.处理信息监督沟通:确保在正确时间将正确信息传递给正确的 ...
- python实现二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...
- vue列表过渡效果
<transition-group></transition-group> ① 列表 <transition-group> </transition-grou ...
- webpack4简单入门
安装webpack需要安装node环境,因此需要在电脑中安装node.node官网https://nodejs.org/,安装LTS版本即可. webpck基本概念 entry:分析依赖模块的入口 o ...
- JT∕T 905 -2014 出租汽车服务管理信息系统的相关协议研究
出租汽车服务管理信息系统(JT∕T 905 -2014) 国家的相关技术要求2014年7月正式出台,总体有四部分, 第 1 部分:总体技术要求: 第 2 部分:运营专用设备: 第 3 部分 ...
- RabbitMQ-消费者"未处理完的消息"丢失
一个关于客户端(消费者)开启自动应答,重启后"未处理消息丢失"的小坑.(主要是对RabbitMQ理解不够) 首先,申明一下: 本文所谓的 "丢失消息" 不是指服 ...