# java-design-patterns **Repository Path**: moyu-jun/java-design-patterns ## Basic Information - **Project Name**: java-design-patterns - **Description**: Java 设计模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-19 - **Last Updated**: 2021-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 设计模式 ## 介绍 设计模式是程序员在设计应用程序或系统时可以用来解决常见问题的最佳形式化实践。 设计模式可以通过提供经过测试的,经过验证的开发范例来加快开发过程。 重用设计模式有助于防止引起重大问题的细微问题,并且还可以提高熟悉模式的编码人员和架构师的代码可读性。 ## 六大原则 ### 单一职责原则(Single Responsibility Principle - SRP) 一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。 ### 开放封闭原则(Open Closed Principle - OCP) 软件实体应该是可扩展,而不可修改的。也就是说,**对扩展是开放的,而对修改是封闭的**。 **对扩展开放**,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 **对修改封闭**,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。 封装变化,是实现开放封闭原则的重要手段,对于经常发生变化的状态一般将其封装为一个抽象。 拒绝滥用抽象,只将经常变化的部分进行抽象,这种经验可以从设计模式的学习与应用中获得。 ### 里氏替换原则(Liskov Substitution Principle - LSP) 里氏替换原则通俗的来讲就是:**子类可以扩展父类的功能,但不能改变父类原有的功能**。它包含以下4层含义: > 1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 > 2. 子类中可以增加自己特有的方法。 > 3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。 > 4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。 ### 最少知识原则(Least Knowledge Principle - LKP) 最少知识原则又叫**迪米特法则**。核心思想是:**低耦合、高内聚** 一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。也就是说一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易,这是对软件实体之间通信的限制,它要求限制软件实体之间通信的宽度和深度。 ### 接口隔离原则(Interface Segregation Principle - ISP) 接口隔离原则的含义是:**建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少**。 采用接口隔离原则对接口进行约束时,要注意以下几点: > 1. 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。 > 2. 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。 > 3. 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。 ### 依赖倒置原则(Dependence Inversion Principle - DIP) 依赖倒置原则的核心思想是**面向接口编程**,不应该面向实现类编程。 在实际编程中,要做到下面3点: > 1. 低层模块尽量都要有抽象类或接口,或者两者都有。 > 2. 变量的声明类型尽量是抽象类或接口。 > 3. 使用继承时遵循里氏替换原则。 ## 类型 设计模式共有 23 种设计模式,分为三大类:创建型模式(Creative Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。 1. 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。 2. 结构型模式:适配器模式、桥接模式、装饰器模式、组合模式、外观模式、享元模式、代理模式。 3. 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。