除了一般的工厂模式之外,还有抽象工厂模式,抽象工厂模式更强调产品族的概念,一个具体工厂生产出来的系列商品都是一个产品族的。

  假设我们有两个具体工厂,分别是袋装水果工厂和罐装水果工厂,它们都能生产苹果和香蕉,这样生产出来的水果就会有四种,其中罐装工厂生产出的罐装水果和香蕉都属于一个产品族。要完成我们所说的代码要一步一步建立我们的工厂和产品。

  首先我们要建立两个接口,再建立四个产品类分别各自继承其接口。

/**
* @author mugglean
*
*
*/ //苹果接口
public interface Apple {
public void produce();
} //香蕉接口
public interface Banana {
public void produce();
} //袋装苹果类
public class BagApple implements Apple { @Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("-------生产了一个袋装苹果-------");
} } //罐装苹果类
public class CannedApple implements Apple { @Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("-------生产了一个罐头苹果-------");
} } //袋装香蕉类
public class BagBanana implements Banana { @Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("-------生产了一个袋装香蕉-------");
} } //罐装香蕉类
public class CannedBanana implements Banana { @Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("-------生产了一个罐头香蕉-------"); } }

  然后我们再建一个抽象工厂和两个实体工厂,就是我们的罐头工厂和袋装工厂。

//工厂接口
public interface FruitFactory {
//生产香蕉
public Banana getBanana();
//生产苹果
public Apple getApple();
} //罐头工厂
public class CannedFactory implements FruitFactory { @Override
public Banana getBanana() {
// TODO Auto-generated method stub
return new CannedBanana();
} @Override
public Apple getApple() {
// TODO Auto-generated method stub
return new CannedApple();
} } //袋装工厂
public class BagFactory implements FruitFactory { @Override
public Banana getBanana() {
// TODO Auto-generated method stub
return new BagBanana();
} @Override
public Apple getApple() {
// TODO Auto-generated method stub
return new BagApple();
} }

  这样我们的所有类都建立好了,再建一个测试进程。

public class TestDrive {

    public static void main(String[] args) {
// TODO Auto-generated method stub
FruitFactory factoryone=new BagFactory();
Banana myBanana=factoryone.getBanana();
myBanana.produce(); FruitFactory factorytwo=new CannedFactory();
Apple myApple=factorytwo.getApple();
myApple.produce();
} }

  运行结果如下:

-------生产了一个袋装香蕉-------
-------生产了一个罐头苹果-------

  成功实现了工厂模式,这样两个工厂模式就讲解完毕了,工厂模式在JDBC和Spring中都有很好的运用,是一个很基础的设计模式。

Java的工厂模式(三)的更多相关文章

  1. !!转!!java 简单工厂模式

    举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...

  2. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  3. 设计模式系列之工厂模式三兄弟(Factory Pattern)

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!

    小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...

  5. Java抽象工厂模式

    Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...

  6. Java的工厂模式(一)

    Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...

  7. Java简单工厂模式

    Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...

  8. Java 静态工厂模式的使用

    多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...

  9. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

随机推荐

  1. day 23 面向对象的命名空间与组合

    创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 1. 静态属性就是直接在类中定义的变量 2.动态属性就是定义在类中的方法. 其 ...

  2. string的函数的学习

    1.string类型的构造函数和对象的定义 string s3 : 把string s2 拷贝的 s3 string s4 : 把数组首地址或者字符串首地址strArr 从0开始截取到第n个字母 st ...

  3. HTTP协议、HTTP协议原理分析

    百度百科中说明: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为 ...

  4. $_ENV和$GLOBALS预定义变量

    1,$_ENV该全局数组可以获取环境变量,在php5.3中默认禁用,但是可以在php.ini中启用. variables_order="EGPCS" 2,$GLOBALS一个包含了 ...

  5. Android安全防护防护———Android 端常见的安全问题

    Android安全防护防护——加密算法:传送门https://www.cnblogs.com/huangjialin/p/9694488.html 组件安全 activity劫持 简单来说就是正常的a ...

  6. 题解 P1731 【生日蛋糕】

    题面传送门 如果不懂DFS,请自觉睡觉: 如果不懂剪枝,请自觉睡觉: 啊哈,大家的思路一定和我一样--DFS,找个数组存储半径和高,可是如单单使用DFS不加剪枝的话,10分--20分. 所以,我们来想 ...

  7. 【学习笔记】linux bash script

    1. sed sed 是一种流编辑器,它是文本处理中非常常用的工具,能够完美的配合正则表达式使用,功能非常强大. mkdir playground touch test.txt echo " ...

  8. java数据结构之二叉树遍历的非递归实现

    算法概述递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍历算法.非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似.对 ...

  9. 关于注解Annotation第二篇

    写一个注解使用类,如下: public class Test { @Code(author = "mazhi",date="20170611") private ...

  10. 运维甩锅神器---Jumpserver

    简介jumpserver 也就是跳板机,堡垒机,主要用于免密钥登陆web终端,可以对所有操作进行记录,录像!对所有服务器进行资产管理, 给开发人员分配登陆主机的权限和sudo权限,为运维人员省了很多手 ...