java设计模式(工厂模式)

1. 意图:
定义一个实例化的接口,让子类选择实例化哪个工厂类,工厂模式是将创建延迟到子类中
2. 使用场景:
明确知道不同条件下创建不同的实例。
3. 使用方法:
定义抽象类,并继承,让其子类实现工厂接口,并返回一个抽象类。
4. 实例:(快递)
我要向河南邮寄快递,提供了2种快递方式,一种是快速(飞机),一种是慢速(汽车),客户只需要选择一种方式即可,
而不用关心这两种方式是怎么实现的。(同时如果有一天邮寄公司想改变慢速的方式(火车)只需要改变工厂里面实例化方式)
客户端不用做改变,就把影响度改的很低,而且也提高了客户的体验度。
而工厂只需要提供一个接口,用来接收用户提供的方式。

一、首先定义一个工厂接口,用来提供不同的运输方式:

package ray.factory;

import ray.bean.Car;
import ray.bean.Plane;
import ray.bean.Traffic;
import ray.tool.Types;

public class Factory {
	private static Traffic traffic = null;//定义一个快递方式的抽象类
	
	//提供一个接口定义传输方式
	//common: 代表选择的邮递方式为普通邮
	//special: 代表选择的方式为加急件
	public static int tansWay(Types type){
		
		if(type == Types.special){
			traffic = new Plane();
		} else if(type == Types.common){
			traffic = new Car();
		}
		traffic.transport();
		return traffic.getDays();
	}
}
二、分别为不同的运输方式实例化对象

定义抽象类:

package ray.bean;

public abstract class Traffic {
	//定义交通路线
	public abstract String getPath();
	//返回路上用的天数
	public abstract int getDays();
	
	public final String transport(){ //返回快递是否到达
		System.out.println("通过的路线为:" + getPath());
		int days = getDays();
		System.out.println("此次快递话费的时间为:" + days);
		return "Succ";
	}
}
定义实现类:

package ray.bean;

public abstract class Traffic {
	//定义交通路线
	public abstract String getPath();
	//返回路上用的天数
	public abstract int getDays();
	
	public final String transport(){ //返回快递是否到达
		System.out.println("通过的路线为:" + getPath());
		int days = getDays();
		System.out.println("此次快递话费的时间为:" + days);
		return "Succ";
	}
}
package ray.bean;

public class Car extends Traffic{

	@Override
	public String getPath() {
		return "北京--新乡--郑州--鹤壁--南阳";
	}

	@Override
	public int getDays() {
		return 10;
	}
	
}
这里提供一个枚举类型来定义用户可以选择的运输方式:

package ray.tool;

//定义用户选择邮递方式的枚举类型
public enum Types {
	common, special
}
三、编写测试类:

package ray.test;

import ray.factory.Factory;
import ray.tool.Types;

public class Test {
	public static void main(String[] args) {
		Factory.tansWay(Types.common);
		System.out.println("===----------");
		Factory.tansWay(Types.special);
	}
}
四、查看输出结果:

通过的路线为:北京--新乡--郑州--鹤壁--南阳
此次快递话费的时间为:10
===----------
通过的路线为:北京--南阳
此次快递话费的时间为:1






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值