工厂模式:
1.例如:我们需要生产一些螺丝吧,我们不需要自己去生产,专门找生产工厂帮我们生产就可以了。这个工厂模式就比如现在的这个工厂,我给他一个东西,工厂就可以为我们提供产品
2.客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
3.请朋友去麦当劳吃汉堡,不同的朋友有不同的口味,要每个都记住是一件烦人的事情,如果你采用Factory Method模式,
带着朋友到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让朋友直接跟服务员说就行了。
降低代码的耦合度,提高代码的灵活性.让对象的生成更简单
为系统结构提供了灵活的动态扩展机制。方便维护
项目中的应用:
还有比如HibernateSessionFactory中的创建session,我们需要session的时候只管要要session就可以了,具体怎么创建session的我们不用管,只管用即可,不然的话,你要自己去写代码进行Session的创建,写很多和业务不相干的代码。
还有比如项目中的dao , 都有一个DAOFactory ,假如我们不使用工程模式的话,每个地方都需要new实现类去定义具体的方法,我们可以抽出来一个DaoFactory,让其他的userdao, roledao都去继承daoFactory。
单例模式:在java虚拟机里面有且仅有一个实例。
好处:对象的唯一性,减少内存占用
项目里面怎么用的
1.把类构造器私有化,对外提供一个静态的方法
2.使用JDBC连数据库的时候,连接池只实例化一次
3.程序员定义的一个读取配置文件的工具类。在项目中可能多次使用这个类,如果每次都new一个实例出来,这样在运行期间就会存在
很多实例,而实际上只需要一个实例对象就可以了。多出来的实例对象会浪费内存资源.
策略模式:
做一件事情有很多种实现的方式
对数据库操作的选择hibernate,ibatis,jdbc
观察者模式
如:短信订阅服务
以前我做的在线购物项目,每当节假日的时候,向所有在线用户发广播通知,也可以通过短信的方式通知注册的用户.
我们的spring中的监听器,
代理模式
通过一个代理类实现对目标类的调用。
手机代理商,移动营业厅,房地产中介,买火车票到代理点买,寄信委托邮局.淘宝代理
保护原对象,降低了对象的耦合度,增加了代码的灵活性,中介作用.
cglib代理,Hibernate的懒加载也是通过代理类实现的.