java设计模式--观察者模式应用场景

观察者分为两种模式:推和拉

推模型是假定知道观察者需要什么数据,传这个数据过去;拉模型是不知道观察者需要什么数据,干脆把自身传给他,按需取值


应用场景如下:

订阅火车票之后,需要记录日志,也需要发送短信

如果常规写法,在订阅火车票内部实现,若以后还需要增加新功能则需要修改核心代码


推模式实现:

client.java 传的"ok"可以是任意字符串,也可以是subject的某一个字段,若为拉模式,只需要改为change(this)即可。

public static void main(String[] args) {
		 Subject subject=new Subject();
		 LogObservers observer=new LogObservers(); 
		 MessageObservers observers=new MessageObservers();
		 
		 subject.addObservers(observer);
		 subject.addObservers(observers);
		 
		 subject.change("ok");
		 
	}
subject.java

public  class Subject {

	private   List<Object> list = new ArrayList<Object>();
	
	public void addObservers(Object object) {
		list.add(object);
	}
	
	public void removeObservers(Object object) {
		list.remove(object);
	}
	
	public void change(String state) {
		System.out.println("观察者改变了!");
		for(Object object : list ) {
			 if(object instanceof LogObservers)
			 {
				 ((LogObservers)object).doWork(state);
			 }else{
				 ((MessageObservers)object).doWork(state);
			 }
		}
	}
}
接口

public interface ITicketObserver {

	public void doWork(String state);
}
短信观察者

public class MessageObservers implements ITicketObserver {

	@Override
	public void doWork(String state) {
		 System.out.println("短信操作开始!更新状态"+state);
	}

}
日志观察者

public class LogObservers implements ITicketObserver {

	@Override
	public void doWork(String state) {
		 System.out.println("日志文件操作开始!更新状态"+state);
	}

}







  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,设计模式是一种用来解决特定场景问题的最佳实践。在面试过程中,对设计模式的理解和应用能力是非常重要的。下面我将介绍几种常用的设计模式及其应用场景。 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,属于创建型模式。它通过提供一种统一的接口来创建对象,使得代码更加清晰易读。工厂模式的应用场景包括:当一个类不知道它所需要的对象的类时;当一个类希望由子类来指定所创建对象的类时;当一个类将创建对象的职责委托给多个辅助子类中的其中一个时。 除了工厂模式,还有其他常用的设计模式。例如,单例模式(Singleton Pattern)用于限制一个类只能创建一个实例,常用于需要全局访问点的场景。适配器模式(Adapter Pattern)用于将一个类的接口转换成客户端所期望的另一个接口,常用于解决接口不兼容的问题。观察者模式(Observer Pattern)用于定义对象间的一对多依赖关系,当一个对象的状态发生变化时,其相关依赖对象都会收到通知,常用于实现事件监听和发布订阅模型。 在面试时,重要的是要将设计模式实际业务场景进行结合,展示出对设计模式的理解和应用能力。举例来说,当面试官问到如何设计一个购物车系统时,可以考虑使用组合模式(Composite Pattern)来表示购物车中的商品和商品组,使用策略模式(Strategy Pattern)来实现不同的计价策略,使用观察者模式来实现库存变化时的通知等。通过结合实际场景,能够更好地展示出对设计模式的理解和灵活运用能力。 此外,面试中还会涉及Java的基础知识。最常考察的点之一是HashMap和ConcurrentHashMap的区别和使用。HashMap是线程不安全的,适用于单线程环境;而ConcurrentHashMap是线程安全的,适用于多线程环境。此外,面试官可能会问到Java的不同版本新技术特性,需要了解每个版本的更新内容和主要特性,例如Java 8的Lambda表达式和Stream API,Java 9的模块化系统等。 总之,在面试过程中,要对不同的设计模式及其应用场景有一定的了解,并能够将其与实际业务场景结合起来。此外,还需掌握Java的基础知识,特别是常考察点如HashMap和ConcurrentHashMap,以及不同版本的新技术特性。这样才能给面试官留下深刻的印象。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值