我的java设计模式 总结【11】访问者 Visitor

访问者

意义 与 场景

关于访问者模式,用处比较局限。其实就是不改变内部实际运行过程而动态的修改内部属性的一种模式。内部实际运行过程时固定的,但是变量不是固定的。那么对于这种这个不固定的变量而固定的运行过程就是访问者模式了,
这个需要先举一个例子,是我用到的真实案例。先介绍一下,我们都知道oracle和mysql的日期格式处理都是不一样的。那么对于数据持久化日期的查询与保存都是不一样的内容,但是对于这个保存或查询时间的动作都是固定的。那么这样我们就可以运用到这个模式了。不同的时间内容就是不同的访问者了。

// 访问者的接口
interface DBDateable {
	String date();
}

// mysql类型的访问者
class mysqlDate implements DBDateable {

	@Override
	public String date() {

		return new SimpleDateFormat("yyyyMMddHHmmss.SSS").format(new Date());
	}
}
// oracle 类型的访问者
class oracleDate implements DBDateable {

	@Override
	public String date() {

		return new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS").format(new Date());
	}
}
//实际操作类
class Save {
	public void saveDate(DBDateable dbDate) {
		System.out.println(dbDate.date());
	}
}

// 测试使用方法
public class DBDate {
	public static void main(String[] args) {
		Save s = new Save();
		s.saveDate(new mysqlDate());
		s.saveDate(new oracleDate());
	}
}

说明

通过这个简单的例子来说,save类是固定的只有一个save方法。也不会再save中增加其他的方法。所以说save是固定的。而对于两个访问者mysql与oracle 来说实现了访问者接口。那么save实际操作类不用管到底是什么类型的数据库时间,拿来直接操作即可。这个是不变的。即使以后出现其他数据库与其他格式的时间,这里的save永远都不需要改变,只需要构造不同的访问者来实现时间格式的格式化即可。若save经常的变动需要不断的增加或者修改方法,那么对于访问者也要不断的修改,对于这类场景那么这个模式是不可以的。只适用于固定格式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值