关于设计模式

其实我们在日常中去写设计模式是非常少的,但是这个问题又是面试的时候经常被问到的。当然,作为一个Java开发,我确实强烈的建议你去看看设计模式,对自己以后写代码读代码确实有非常大的帮助。但是我这里并不是去讲设计模式,而是告诉你如何应付面试中的典型问题:你对设计模式了解吗?

 

关于设计模式,面试官也只是做一个简单的了解,难道真的让你写出来不成?你只要会说,让面试官以为你知道就行了。

设计模式有23种,就算你把23种全部学完,我相信你在面试中也不可能把23种全部说出来的,最直接的办法,就从“应用”中去说自己理解的设计模式。

 

设计模式这个东西,我有一定的理解,比如我们的Spring框架,就是典型的运用大量的设计模式。

比如单例模式——我们创建service,controller这些就是典型的单例;

当然如果想要它生成一个prototype作用域的实例,也就是原型模式,只不过我们也很少用到;

像AOP这个就是明显用代理模式去实现的,我们用的类就是它的代理类;

同样Spring也是一个庞大的工厂,也就是工厂模式

Spring下还有各种各样的template,比如RestTemplate, RedisTemplate, 这些都是明显的模版方法,同样我们常用JDK的List—AbstractList—LinkedList—ArrayList这些也是模版方法,把共性的写到抽象类中,把特性写在实现类;

当然JDK的IO,各种InputStream,BufferInputStream,这些就是装饰器模式

我们平常写代码各种“链式风格”的写法,也叫fluent的写法,也是创建者模式

像发布与订阅,类似ZK的watch机制,就是观察者模式

有时候像管理台的菜单,或者是公司的组织架构,我们都会以“树”的方式去实现整套架构,这个就是组合模式

当然还有我们最常写的for循环,iterator这些就是迭代器模式

有时候我们可能需要对框架做一些扩展,可以用适配器模式

我们最常用的三层架构,其实也是一个设计模式——外观模式;

 

当然如果自己还有更擅长的,比如解释器模式、策略模式、装饰起模式、享元模式、桥接模式、状态模式、责任链模式等等,这些自己多去掌握以下也没问题,基本上设计模式回答到这个程度就够了。

另外特别喜欢考的就是单例模式的线程安全问题,自己一定要掌握如何写一个线程安全的单例模式,这个有可能让你现场手写的。

 

最后,如果自己在工作中有用到一些设计模式,就把自己工作的业务场景+设计模式说出来,这样也会让面试官觉得你对设计模式有非常深入的理解。

你可能感兴趣的:(关于设计模式)