设计模式之抽象工厂模式(Java实现)
“上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求。”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真的!)。
福利:工厂方法模式之应用场景
各位好,说起来应用场景,那简直是项目处处有工厂方法啊~虽然这么说有点大言不惭,但是真的是使用率超级高的说。
- 当一个类不知道它所必须创建的对象的类的时候。
- 当一个类希望由它的子类来指定它所创建的对象的时候。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
好了,我要讲的就这么多,接下来的时间就交给我老婆了。(掌声雷动~)
抽象工厂模式之自我介绍
大家好,今天由我来带领大家领略一下抽象工厂模式,恩,其实人家也是一种比较常用的模式啦,有关我的定义是:Provide an interface for creating families of related or dependent objecets without specifying their concrete classes.“老公,给翻译一下呗。“啊?哦,好的。”(作者按:秀恩爱,死的。。。喂,我还没说完呐。被毫无尊严拖走的作者)。这句的意思是为创建一组相关或者相互依赖的对象提供一个接口,而且无须指定它们的具体类。
抽象工厂模式的通用类图如下所示:
我呐,其实就是我老公的升级版了,在有多个业务品种、业务分类的时候,就轮到我登场了~好了,基本情况就是酱紫了。我要回去做饭了。“哎,老婆,别走,这样不行的,你还要讲解一下具体的实现,要不然他们不懂的。“可是,可是臣妾做不到啊。“很简单的,你只要这样,这样,然后这样,就可以了。“我读书少,老公你不要骗我。不然,哼哼~”
抽象工厂模式之具体实现
上次鱼哥说做的东西品种太少,吃多了就吃腻了,所以,这次就多来几个品种,对了,上次老公的好多东西没用完,看看能不能尽量的废物利用,勤俭持家的传统美德还是要保持的~
1 public interface Food{
2 public void createFood();
3
4 //每种吃的都有品牌与种类
5 public void getBrand();
6 }
食物有两种抽象类,一种是糖葫芦,一种是辣条。下面的代码分别是糖葫芦和辣条的实现类:
1 public abstract class AbstractTanghulu implements Food{
2 public void createFood(){
3 System.out.println("我是好吃的糖葫芦~");
4 }
5 }
1 public abstract class AbstractLatiao implements Food{
2 public void createFood(){
3 System.out.println("我是好吃的辣条~");
4 }
5 }
每个抽象类还有两个实现类,分别是实现公共的细节具体的事情,也就是那些个食物的牌子,下面我就以糖葫芦为例进行实现,辣条的也就是类似了:
1 public class OldPekingTanghulu extends AbstractTanghulu{
2 public void getBrand(){
3 System.out.println("老北京糖葫芦~");
4 }
5 }
这个是糖葫芦的具体实现类,显示了它的牌子是老北京的,最有名的糖葫芦~之一了。
1 public class TianjinTanghulu extends AbstractTanghulu{
2 public void getBrand(){
3 System.out.println("天津糖葫芦~");
4 }
5 }
这个呢,自然就是天津的糖葫芦了,天津也算是一个好地方啊,好玩的好听的天津相声~还有鱼哥,也是我们的最爱,天津麻花~好了,有关食物的类已经实现了,接下来就是制造糖葫芦以及辣条的“工厂”的具体实现了首先就是生产糖葫芦和辣条的接口了:

1 public interface FoodFactory{
2
3 //生产糖葫芦
4 public Food createTanghulu();
5
6 //生产辣条
7 public Food createLatiao();
8 }

接下来能否生产真正的糖葫芦以及辣条就看这一步了,首先是生产老北京糖葫芦的实现类:
1 public class OldPekingFactory implements FoodFactory{
2 //生产老北京糖葫芦
3 public Food createOldPeking();
4
5 }
接下来就是生产天津糖葫芦的实现类(由于比较懒,所以就只实现了糖葫芦的,至于辣条的,你们这么聪明,自然会写的了):
1 public class OldPekingFactory implements FoodFactory{
2 //生产天津糖葫芦
3 public Food createTianjin();
4
5 }
到此就完成了实现,想不想来尝尝两种糖葫芦有什么不同以及哪个比较好吃吗?不用说也知道你们想的,所以就来个测试类来做点糖葫芦来吃,不然作者又要吐槽了,下面的就是测试类,用于生产两种糖葫芦的:
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:作者慢悠悠的从后面走来了)。好了,这次的就到这里了。“哎,好像缺点什么来着,缺点什么呢?”(抽象工厂模式:哎呀,老公,我忘了说应用场景了啊~~~工厂方法模式:有么?没有把。先好好做饭吧,饿死了啊、、、)欲知后事如何,且听下回分解。
设计模式之抽象工厂模式(Java实现)的更多相关文章
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- 设计模式之第2章-抽象工厂模式(Java实现)
设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- Java设计模式系列-抽象工厂模式
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
随机推荐
- Nginx实战系列之功能篇----后端节点健康检查(转)
公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_m ...
- Linux启动与禁止SSH用户及IP的登录
以下就针对SSH方面讨论一下.假设有人特别关注Linux环境的安全性,第一就从login方面来进行讨论 1:Linux启动或禁止SSH root用户的登录 2:Linux限制SSH用户 事实上这些东西 ...
- iOS边练边学--触摸事件以及能够拖拽的UIView的练习
一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象 ...
- Entity Framework应用:Code First模式数据迁移的基本用法
使用Entity Framework的Code First模式在进行数据迁移的时候会遇到一些问题,熟记一些常用的命令很重要,下面整理出了数据迁移时常用的一些命令. 一.模型设计 EF默认使用id字段作 ...
- Hibernate- hibernate二级缓存
原文地址:http://www.iteye.com/topic/18904 很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了. ...
- golang中map并发读写问题及解决方法
一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误 如下代码很容易就出现map并发读写问题 ...
- Cygwin镜像使用帮助
Cygwin镜像使用帮助 收录架构 x86 x86_64 收录版本 所有版本 更新时间 每12小时更新一次 使用说明 选择从互联网安装, 在"User URL"处输入以下地址 ...
- Juint测试
添加"Juint测试"组件: 之后不用写在main方法里面便可以直接测试:
- 数学符号arg含义
argument of the maximum/minimum arg max f(x): 当f(x)取最大值时,x的取值 arg min f(x):当f(x)取最小值时,x的取值 表示使目标函数取最 ...
- hibernate、struts、spring mvc的作用
Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提 ...