java 工厂方法模式简单实例
工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。
目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。
工厂方法模式包含四个部分:
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 工厂方法模式简单实例的更多相关文章
- Java 工厂方法模式的简单示例
工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象. 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究 ...
- Java工厂方法模式
工厂方法模式: /** * 工厂方法模式:也叫工厂模式,属于创建型模式,父类工厂(接口)负责定义产品对象的公共接口, * 而子类工厂负责创建具体的产品对象. * 目的:是为了把产品的实例化操作延迟到子 ...
- 设计模式(三)——Java工厂方法模式
工厂方法模式 1 看一个新的需求 披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪 pizza.北京的胡椒 pizza 或者是伦敦的奶酪 pizza.伦敦的胡椒 pizza. ...
- JAVA工厂方法模式(Factory Method)
1.普通工厂模式 普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 1-1.建立Sender接口 public interface Sender { public void ...
- Java 工厂方法模式
在工厂对象上调用创建方法,生成接口的某个实现的对象 通过这种方式,接口与实现分离 方法接口 /** * 方法接口 */ public interface Service { void method1( ...
- 大白话工厂方法模式(Factory Method)
目录 简单工厂模式缺陷 简单工厂模式改造 工厂方法模式定义 工厂方法模式结构 工厂方法模式分析 参考文献 简单工厂模式缺陷 大白话简单工厂模式(Simple Factory Pattern)中通过买车 ...
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)
Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...
随机推荐
- vue-clickoutside d
js文件 export default { bind(el, binding, vnode) { function documentHandler(e) { if (el.contains(e.tar ...
- React容器组件和展示组件
Presentational and Container Components 展示组件 - 只关心它们的样子. - 可能同时包含子级容器组件和展示组件,一般含DOM标签和自定的样式. ...
- Android 基础知识图谱
四大组件 Activity Service BroadcastReceiver ContentProvider Application 常用组件 Fragment RecyclerView WebVi ...
- canves图形变换
canves用得好可以有好多效果: html:<canvas id="myCanvas" width="700" height="300&quo ...
- node 搭建本地服务器
/** * 代理服务器 natapp -authtoken f1bdaa0535788971 * 热部署指令 supervisor index */ const Koa = require('koa' ...
- SQL基本操作——通配符
SQL 通配符:在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE 运算符一起使用.在 SQL 中,可使用以下通配符: 通配符 描述 % 替代一个或多个字符 ...
- 实例分割:MaskXRCnn 与Visual Genome数据集
一.VG数据集 机器学习领域的突破突然让计算机获得了以未曾有的高精度识别图像中物体的能力--几乎达到了让人惊恐的程度.现在的问题是机器是否还能更上层楼,学会理解这些图片中所发生的事件. Visual ...
- HDU_3549_网络流(最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- sqlserver 批量更新
select * from [LPicture] UPDATE [dbo].[LPicture] SET [picGroup] = ' WHERE LPictureid ,); select * fr ...
- UpdateData
UpdateData 类似于C语言的scanf printf函数 管理控件与关联变量之间的数据更新. updatedata(true)把界面输入的数值更新到关联变量中,updatedata(false ...