偶然看到了这篇讲设计模式的文章,很好理解,看完了之后自己总结概况了一下。结尾附上原文地址。
六大原则:
1、单一职责原则:一个类或一个方法只专注于一件事
2、里氏替换原则:子类继承父类实现父类方法时,最好不要对于方法直接进行修改和扩展,方法可以增加,但最好不要对于方法内部实现直接进行扩展。
3、依赖颠倒原则:接口或者抽象类不要依赖基类,要以接口的形式存在
4、接口隔离原则:一个类不需要去实现它本不需要的接口或接口中的方法,适当的结合业务场景去拆分接口会让实现类更健康
5、迪米特法则:高内聚、低耦合;只依赖和自己有强关联性的类,不要将一个业务中所有的对象都依赖在一个类中
6、开闭原则:保持对于扩展的开放性、减弱对于修改的开放性;简单地说当业务是多变的时,尽量保证当变化时去新增子类或者实现类对于功能进行个性化扩展而不是修改原有现行业务代码。
五大创建型模式:
1、单例模式:整个系统单个实例,自行私有实例化并向其他模块提供实例;多线程懒汉模式要考虑线程安全性。
2、工厂模式:子类对于实例的创建进行扩展。其实就是符合开闭原则的实例化。
3、抽象工厂模式:工厂模式是对于一个类多层次的实例化扩展,而抽象工厂是利用工厂模式对于多个类的多层次实例化扩展。
4、建造者模式:将复杂的对象实例化过程进行封装,让调用者只关心结果
5、原型模式:借助Cloneable 接口和clone()实现对于对象的合理利用,避免多次实例化对于内存的过大开销。
十一大行为模式:
1、模版方法:将操作的具体实现延伸到子类,父类保持固定的调用结构
2、中介者模式:在直接依赖的对象直接增加一层中介,弱化依赖,例如view->controller->model
3、命令模式:在上传下达的业务场景中,可以将行为抽象出来,削弱强依赖关系,命令做中介。
4、责任链模式:在多流程/多阶段的业务场景中,将业务逻辑进行封装,调用时只关注对象本身,类似于web开发中的多个Filter的调用
5、策略模式:将多个算法和业务逻辑封装成两个对象,以调用的方式进行组合/切换,常结合工厂模式。
6、迭代器模式:当集合被封装于对象中时,在需要遍历的场景中,不直接访问集合,而使用迭代器作为抽象来访问,降低耦合。
7、观察者模式:一个对象的改变会触发其他相关对象的改变,比如:消息队列的消费和hibernate设置外键后的关联update和delete
8、状态模式:将流程状态的判断转换成多个状态对象对于状态的业务方法的不同的实现。
9、备忘录模式:对于一个可能需要回滚的对象,用一个对象来做回收记录
10、解释器模式:利用接口扩展性实现语言的解释(hibernate-SQL解释器)
11、访问者模式:如果C对象的业务流程需要根据A、B不同的的值来遍历判断时利用接口来扩展抽象出来。
七大结构型模式:
1、适配器模式:把两个无法关联的类相结合,使A对外暴露成B,参考java IO
2、桥接模式:抽象层次对象之间相互依赖,降低实现的耦合程度
3、组合模式:a.安全模式:抽象层只定义共通方法,特殊方法由实现层自己实现;b.透明模式:抽象层定义全部方法,实现层对于不需要的方法做空实现。
4、装饰模式:在父类和子类的继承关系中增加一层装饰器,子类super之后再进行各自实现,此时左右子类及父类皆可以被装饰,而装饰行为又不会入侵父类或者子类代码。
5、外观模式:对于实现细节的封装,使其变化不影响外部的调用。
6、享元模式:封装对象的创建,复用对象不再次去创建,减少资源浪费。
7、静态代理模式:两个类实现同一个接口,A类的A方法对于B类的A方法进行封装,调用A类A方法时,即实现对于B类的代理。
原文链接:设计模式看了又忘,忘了又看? - 掘金