工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。

目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。

工厂方法模式包含四个部分:

1.抽象产品:产品对象同一的基类,或者是同一的接口。

2.具体的产品:各个不同的实例对象类

3.抽象工厂:所有的子类工厂类的基类,或是同一的接口

4.具体的工厂子类:负责每个不同的产品对象的实际创建

具体的实例代码:

1.抽象的产品类:定义car  交通工具类下:

package factory.simple;

/**
* 抽象产品角色 交通工具接口
*
* @author lilin
*
*/
public interface Car { /**
* 上班函数
*/
void gotowork(); }

2.定义实际的产品类,总共定义两个,bike 和bus 分别表示不同的交通工具类

package factory.simple;

/**
* 具体产品角色,自行车
*
* @author lilin
*
*/
public class Bike implements Car {
@Override
public void gotowork() {
System.out.println("骑自行车去上班!");
} }
package factory.simple;

/**
* @author lilin
*
*/
public class Bus implements Car { @Override
public void gotowork() {
System.out.println("坐公交车去上班!");
} }

3.抽象的工厂接口定义如下:、

/**
*
*/
package factory.factory; import factory.simple.Car; /**
* @author lilin
*
*/
public interface ICarFactory { /**
* 获取交通工具
*
* @return
*/
Car getCar(); }

4.具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类:

/**
*
*/
package factory.factory; import factory.simple.Bike;
import factory.simple.Car; /**
* @author lilin
*
*/
public class BikeFactory implements ICarFactory { @Override
public Car getCar() {
return new Bike();
} }
/**
*
*/
package factory.factory; import factory.simple.Bus;
import factory.simple.Car; /**
* @author lilin
*
*/
public class BusFactory implements ICarFactory { @Override
public Car getCar() {
return new Bus();
} }

最后,使用简单的测试类,来验证下 不同的工厂能够产生不同的产品对象:测试类如下:

/**
*
*/
package factory.factory; import org.testng.annotations.Test; import factory.simple.Car; /**
* @author lilin
*
*/
public class TestFactory { @Test
public void test() {
ICarFactory factory = null;
// bike
factory = new BikeFactory();
Car bike = factory.getCar();
bike.gotowork(); // bus
factory = new BusFactory();
Car bus = factory.getCar();
bus.gotowork();
} }

打印结果如下:

骑自行车去上班!
坐公交车去上班!

工厂模式,可以理解为:有了很多个工厂方法,自己需要哪一个产品,就调用当前产品的工厂方法,获取相应的具体实例。

java 工厂方法模式简单实例的更多相关文章

  1. Java 工厂方法模式的简单示例

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象. 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究 ...

  2. Java工厂方法模式

    工厂方法模式: /** * 工厂方法模式:也叫工厂模式,属于创建型模式,父类工厂(接口)负责定义产品对象的公共接口, * 而子类工厂负责创建具体的产品对象. * 目的:是为了把产品的实例化操作延迟到子 ...

  3. 设计模式(三)——Java工厂方法模式

    工厂方法模式 1 看一个新的需求 披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪 pizza.北京的胡椒 pizza 或者是伦敦的奶酪 pizza.伦敦的胡椒 pizza. ...

  4. JAVA工厂方法模式(Factory Method)

    1.普通工厂模式 普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 1-1.建立Sender接口 public interface Sender { public void ...

  5. Java 工厂方法模式

    在工厂对象上调用创建方法,生成接口的某个实现的对象 通过这种方式,接口与实现分离 方法接口 /** * 方法接口 */ public interface Service { void method1( ...

  6. 大白话工厂方法模式(Factory Method)

    目录 简单工厂模式缺陷 简单工厂模式改造 工厂方法模式定义 工厂方法模式结构 工厂方法模式分析 参考文献 简单工厂模式缺陷 大白话简单工厂模式(Simple Factory Pattern)中通过买车 ...

  7. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

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

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  9. Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)

    Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...

随机推荐

  1. Django 更新字段

    Django在1.7以后的版本提供数据迁移命令,用来在修改模型中的字段,更新到数据库 1. python manager.py makemigrations 命令用来创建迁移文件版本的 2. pyth ...

  2. (转)postgis常用函数介绍(一)

    http://blog.csdn.net/gisshixisheng/article/details/47701237 概述: 在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,po ...

  3. ajax异步请求详解

    1.XMLHttpRequst的出现才有了异步处理 2.创建XmlHttpRequest对象 var request=new XMLHttpRequest(); 注意:如果要兼容IE6以下浏览器则需要 ...

  4. pythonGUI编程——Qt库(1)

    1.简单示例实现一个小窗口.       PyQt5是一种高级的语言,下面只有几行代码就能显示一个小窗口.底层已经实现了窗口的基本功能. #!/usr/bin/python#coding:utf-8# ...

  5. tomcat8安装及配置

    首先是解压版的安装.很简单,直接解压到要安装的位置就OK了. 2.启动 bin目录下,执行startup.bat文件 3.浏览器中打开地址http://localhost:8080/

  6. c++ map迭代器

    #include <stdio.h> #include <map> using namespace std; int main(){ map<int, int> m ...

  7. const浅析

    前言 c++中使用到const的地方有很多, 而且const 本身也针对不同的类型可能有不同的含义, 比如对指针就有顶层和底层. 本节就是探讨关于C++中const的在不同的地方不同表现或含义. co ...

  8. 洛谷——P2169 正则表达式

    P2169 正则表达式 题目背景 小Z童鞋一日意外的看到小X写了一个正则表达式的高级程序,这个正则表达式程序仅仅由字符“0”,“1”,“.”和“*”构成,但是他能够匹配出所有在OJ上都AC的程序的核心 ...

  9. Luogu P3901 数列找不同

    由于技术原因,题目我贴不上了,大家点下面的链接自己去看吧^_^ P3901 数列找不同 这题第一眼看去,题面真短,有坑(flag) 在往下面看去,woc数据这么大,你要怎样. 现在一起想想想,超级侦探 ...

  10. 42.global bucket的使用:单个品牌与所有品牌销量对比

    主要知识点: _global bucket的使用     本例以搜索单个品牌和所有品牌的销量对比进行学习_global .es在进行aggregation操作时都只只是在一个scope中进行聚合等操作 ...