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

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

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

/**
* @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. StormUI详解

    StormUI由Cluster Summary,topology summary,supervisor summary,Nimbus Configuration四部分组成,如下图所示: Cluster ...

  2. Cassandra的数据模型

    Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace.下面分别介绍这几种类型. ...

  3. webpack快速入门——如何安装webpack及注意事项

    1.window+R键,输入cmd打开命令行工具,输入 mkdir XXXX(XX:文件夹名): 2.cd XXX 进入刚刚创建好的文件夹里,输入cnpm install -g webpack (安装 ...

  4. [JavaScript] 时间戳格式化为yyyy-MM-dd日期

    function formateDate(timestamp){ var date = new Date(timestamp); var y = 1900+date.getYear(); var m ...

  5. 简单HOG+SVM mnist手写数字分类

    使用工具 :VS2013 + OpenCV 3.1 数据集:minst 训练数据:60000张 测试数据:10000张 输出模型:HOG_SVM_DATA.xml 数据准备 train-images- ...

  6. css实现带箭头的流程条

    直接上效果图: <ul class="navs"> <li>1</li> <li>2</li> <li>3& ...

  7. 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 1、经常提及的问题

    Frequently Asked Questions Congratulations to be part of the first class of the Deep Learning Specia ...

  8. android动态权限获取

    android动态权限获取 Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候 ...

  9. Failed to instantiate [java.util.List]: Specified class is an interface

    错误信息提示: Failed to instantiate [java.util.List]: Specified class is an interface; 错误信息意思:参数错误,参数封装出了问 ...

  10. SpringAOP-基于@AspectJ的简单入门

    一.AOP的基本概念: 连接点(Jointpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行.方法调用.字段调用或处理异常等等,Spring只支持方法执行连接点,在A ...