设计模式之第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:作者慢悠悠的从后面走来了)。好了,这次的就到这里了。“哎,好像缺点什么来着,缺点什么呢?”(抽象工厂模式:哎呀,老公,我忘了说应用场景了啊~~~工厂方法模式:有么?没有把。先好好做饭吧,饿死了啊、、、)欲知后事如何,且听下回分解。

  第一篇:设计模式之序章-UML类图那点事儿

  第二篇:设计模式之第0章-单例模式(Java实现)

  第三篇:设计模式之第1章-工厂方法模式(Java实现)

  PS:本博客欢迎转发,但请注明博客地址及作者~

   博客地址:http://www.cnblogs.com/voidy/

    博客新址:http://voidy.net

   <。)#)))≦

设计模式之第2章-抽象工厂模式(Java实现)的更多相关文章

  1. 第3章 抽象工厂模式(Abstract Factory)

    原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...

  2. 设计模式之第12章-享元模式(Java实现)

    设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...

  3. 设计模式之第19章-中介者模式(Java实现)

    设计模式之第19章-中介者模式(Java实现) “测试妹纸找你,你的代码出问题了.”“美工妹纸让你看看界面怎么样.”身为程序员总要和各种人打交道,但是如果再分为前端.后端工程师的话,那么关系就会错综复 ...

  4. 设计模式之第13章-职责链模式(Java实现)

    设计模式之第13章-职责链模式(Java实现) “请假都那么麻烦,至于么.”“咋的了?”“这不快过年了么,所以我想早两天回去,准备一下,买买东西什么的,然后去给项目经理请假,但是他说快过年了,所以这个 ...

  5. 大话设计模式C++实现-第15章-抽象工厂模式

    一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...

  6. C#设计模式学习笔记:(3)抽象工厂模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

  7. 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)

         今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...

  8. C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

  9. .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

随机推荐

  1. javascript的常用操作(一)

    1.  实时监听input的值变化 onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效; 而onkeydown/onkeypress/onkeyup在处理复制.粘贴. ...

  2. mac上Apache修改目录浏览权限

    sudo vim /etc/apache2/httpd.conf <Directory "/Library/WebServer/Documents"> # # Poss ...

  3. windows phone 8.0 的网络图片异步加载方案

    买了一本林政的8.1UI的书,看到一个使用弱引用对像来解决图片缓存的问题,刚好自已写的应用也遇到这个问题,于是小改动了一下代码,搬到了8.0版本来使用,代码由 zhxilin℃+ 大神提供了部分解决代 ...

  4. innobackupex基于binlog日志的恢复 -- 使用mysqlbinlog恢复

    备份先做一次完整备份: innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 /data/mysqlba ...

  5. Oracle开发›如何取出每个分组的第一条记

    <ignore_js_op> 截屏图片 (2).jpg (43.34 KB, 下载次数: 21) 下载附件 2012-11-7 12:36 上传   如何取出每个分组的第一条记录(黄色背景 ...

  6. hive对有null值的列进行avg,sum,count等操作时会不会过滤null值

    在hive中,我们经常会遇到对某列进行count.sum.avg等操作计算记录数.求和.求平均值等,但这列经常会出现有null值的情况,那这些操作会不会过滤掉null能呢? 下面我们简单测试下: wi ...

  7. STM32启动流程

    启动文件主要工作: . 设置堆栈指针SP=_initial_sp . 设置PC指针=Reset_Handler . 配置系统时钟 . 配置外部SRAM用于程序变量等数据存储(可选) . 调用C库中的_ ...

  8. 漫谈 Clustering (5): Hierarchical Clustering

    系列不小心又拖了好久,其实正儿八经的 blog 也好久没有写了,因为比较忙嘛,不过觉得 Hierarchical Clustering 这个话题我能说的东西应该不多,所以还是先写了吧(我准备这次一个公 ...

  9. windows下安装win7虚拟机并安装oracle

    一.win7虚拟机 与安装linux虚拟机没有什么不同,不同的是选择客户机操作系统.内存.磁盘容量,以及映像文件. 创建win7虚拟机步骤简化: 新建虚拟机-->>自定义-->> ...

  10. eclipse部署web项目至本地的tomcat但在webapps中找不到问题

    一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...