设计模式之第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),提供一种“封装机制”来 ...
随机推荐
- Eucalyptus简介
1.Eucalyptus是什么? Eucalyptus n.桉树 Eucalyptus is a Linux-based software architecture that implements ...
- JSON.parse() 和 JSON.stringify()的简单介绍
参考地址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse ht ...
- 不该被忽视的CoreJava细节(四)
令人纳闷的数组初始化细节 这个细节问题我很久以前就想深入研究一下,但是一直没有能够抽出时间,借这系列文章的东风,尽量解决掉这个"心头病". 下面以一维int数组为例,对数组初始化方 ...
- jQuery_2_常规选择器-高级选择器2
属性选择器 <a title="num1">num1</a> <a title="num-ad">num2</a> ...
- Coursera 算法二 week 4 Boggle
这次的作业主要用到了单词查找树和深度优先搜索. 1.在深度优先搜索中,在当前层的递归调用前,将marked数组标记为true.当递归调用返回到当前层时,应将marked数组标记为false.这样既可以 ...
- Netweaver工作进程的内存限制 VS CloudFoundry应用的内存限制
Netweaver 一个会话进程能够在堆上申请的内存大小上限, 在事务码RZ11里查看参数abap/heap_area_dia: CloudFoundry 每个应用可以在manifest.yml里定义 ...
- Liunx开发(Extjs4.1+desktop+SSH2超强视频教程实践)(2)
然后装eclipse: 为啥默认是搜狗导航: java还没装呢: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...
- SpringBoot学习记录(二)
一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...
- Java基础面试操作题: 获取 1-20 之间的随机数,共计 20 个,要求不能重复 获取 1-20 之间的随机数,共计 10 个,要求不能重
package com.swift; import java.util.HashSet; import java.util.Random; import java.util.Set; public c ...
- Java发出声卡蜂鸣生的方法
方法一: Toolkit.getDefaultToolkit().beep(); 方法二: System.out.println('\007');//八进制数