近日受一位资深程序员大牛写的一篇学习路线建议的博客影响,《大话设计模式》一书,同时参考“设计模式”一书。此篇博客为读《大话设计模式》的学习心得笔记...
简单工厂模式
简单工厂模式,运用了java继承的特点,在基类中定义方法作为父类方法,当出现多种情况,分别对这个方法有不同的
操作的时候。子类继承父类,然后重写方法,来实现符合自己的要求。当有新情况出现的时候。可以在不影响其他子类的
情况下,新增一个类,重写基类方法,来实现符合该需求的方法。
例如:一个计算类,有一个getResult方法,加减乘除,分别继承这个计算类,当有出现其他计算,入平方计算的时候,
只需要新增一个平方的类,重写getResult方法即可。
工厂模式
和简单工厂模式有点类似,运用了java继承的特点,重写方法来实现功能的实现。但是和简单工厂模式的区别为:简单工厂模式中如果功能所有变动,需要修改判断逻辑(违背了开放-封闭原则),因为简单工厂模式是通过动态来创建对象实例的。
工厂模式则是通过实例化确定工厂类的子类,然后调用方法来实现功能的。
策略模式
策略模式为用来封装算法的一种设计模式。
例如1:数组排序的算法非常多。有二分法,冒泡法等等。遵循单一职责原则,算法只做算法的真正实现,而不做算法的选择工作。将算法统一由一个策略抽象类来声明,然后由其各种子类来实现具体的算法。当环境类要调用时,通过实例化具体的子类,来选择所需要的算法。可将所需要的具体算法类(具体策略类类名)定义在config.xml配置文件中,通过取配置文件的类名+反射机制,来实例化具体策略实现类的实例来实现具体功能。
由环境类或客户端来决定具体使用哪种具体策略类。当需要新增新算法时,只需要新增具体策略类,实现抽象类的方法,并修改配置文件的具体策略类类名来实现功能即可。
单一职责原则:
就一个类而言,应该只有一个引起他变化的原因,类的职责单一,使其低耦合,才能够提高复用。
开放-封闭原则
可扩展。但不可更改。既增加新功能是通过增加新代码来实现的,而不是通过修改旧有的代码来实现。
一个项目,需求是在不断的变化的。开放封闭原则就是在需求变更时,可以通过扩展来实现新功能,但是不更改旧有的代码,这样大大的减小影响旧有功能的风险,并使程序不会越来越复杂。
装饰模式
动态给对象添加一些额外的职责(功能)
装饰类通过内置主体对象来实现,既可以实现主体对象的功能,有增加了自己独特的功能(自己的方法)
从功能上来看,和继承的特性是一样的(都是父类功能,加上自己的功能)。从灵活性来看,装饰模式更加灵活(每个装饰对象可以决定是否调用主体对象的功能(继承中父类的功能))
代理模式
为其他对象提供一种代理,以控制对这个对象的访问--GoF描述
通过实现接口或抽象类来完成职责的代理执行。
例如windows的桌面快捷键,通过代理,使用户点击快捷键就能启动应用。
例如一个很大的HTML页面,打开是却很快,因为里面的图片使用了代理,代理储存图片的路径和大小。等HTML页面打开后,才开始慢慢的加载图片(性能优化)--虚拟代理。
例如计算对象的引用次数,此时对象的大部分功能无需排上用场,使用代理模式,可以担任这种额外的工作(没必要由主类来实现,调用真实对象时,由代理来计算引用次数)--智能指引
单例模式
既一个类只实例化一个对象通常通过私有构造函数,开放一个静态的get方法返回一个实例对象。
分为懒汉模式和恶汉模式。
饿汉模式:将实例化的对象定义时直接new。
懒汉模式:get方法中判断对象时候实例化,如果实例化,直接返回。如果未实例化,实例化后返回。