Skip to content

zhangxin1932/java-design-pattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#1.面向对象设计的基本原则
###1.11OCP(开闭原则:open-closed principle):
一个软件的实体应当对扩展开放,对修改关闭,如:
当需要对已有程序增加功能时,尽量增加实现类来修改,避免在原有的类上直接修改
###1.2DIP(依赖倒转原则: dependency inversion principle):
要针对接口编程,不要针对实现编程
###1.3LoD(迪米特原则: Law of Demeter):
只与你直接的朋友通信,而避免和陌生人通信
#2.工厂模式
核心本质:

    ---实例化对象,用工厂方法代替new操作
    ---将选择实现类,创建对象同一管理和控制,从而将调用者跟实现类解耦
    
###2.1简单工厂模式:
用来生产同一等级结构中的任意产品(对于增加新产品时,需要修改已有代码,不满足OCP原则)
###2.2工厂方法模式:
用来生产同一等级结构中的固定产品(支持增加任意产品)
###2.3抽象工厂模式:
用来生产不同产品族的全部产品(对于增加新的产品,无能为力;支持增加产品族)
#3.建造者模式(builder)
核心本质:

    ---分离了对象子组件的单独构造(由builder来负责)和装配(由director来负责),从而可以构造出复杂的对象
    --- 该模式适用于:某个对象的构建过程复杂的情况下使用
    --- 由于实现了构建和装配的解耦,不同的构建器,相同的装配,可以作出不同的对象;
    --- 相同的构建器,不同的装配顺序也可以作出不同的对象;
    --- 也就是实现了构建算法,装配算法的解耦,实现了更好的复用
#4.观察者模式
核心本质:

    ---主要用于1:N的通知.当一个对象(目标对象,subject或者Obserable)的状态变化时,他需要告知一系列对象(Observer),令他们作出响应
    ---通知观察者的方式:
        -推:
            每次都会把通知以广播的形式发送给所有观察者,所有观察者只能被动接收
        -拉:
            观察者只要知道有情况即可.至于什么时候获取内容,获取什么内容,都可以自主决定.
    ---其中,多个订阅者,客户称之为观察者,需要同步给多个订阅者的数据封装到对象中,称之为目标/主题.

#5.桥接模式
核心本质:

    ---将实现与抽象放在两个不同的类层次中,使两个层次可以独立
    ---系统有多维角度分类时,而每一种分类又有可能变化,考虑使用桥接模式
    ---桥接的目的是分离抽象与实现,使抽象和实现可以独立变化。

桥接模式与策略模式的差异:

    ---桥接的目的是让底层实现和上层接口可以分别演化,从而提高移植性
    ---策略的目的是将复杂的算法封装起来,从而便于替换不同的算法
    
    ---桥接模式是往往是为了利用已有的方法或类
    ---策略模式是为了扩展和修改,并提供动态配置
    
    ---桥接模式强调接口对象仅提供基本操作
    ---策略模式强调接口对象提供的是一种算法

#6.责任链模式

    ---如果有多个对象都有机会处理请求,责任链可使请求的发送者和接收者解耦,请求沿着责任链传递,直到有一个对象处理了它为止。

    ---优点:
     ---将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求
     ---可以简化对象,因为它无须知道链的结构
     ---可以动态地增加或删减处理请求的链结构
     
    ---缺点:
     ---请求从链的开头进行遍历,对性能有一定的损耗
     ---并不保证请求一定被处理

    ---适用场合:
     ---有多个对象可以处理一个请求
     ---不明确接收者的情况
     ---有序、无序链,线型、树形、环形链

    ---责任链模式和状态模式主要区别:
     ---责任链模式注重请求的传递
     ---状态模式注重对象状态的转换

#7.装饰者模式

    ---装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性
    ---如: 主体:咖啡, 调料:牛奶, 糖
    ---如: jdk中的IO流的设计

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages