Java设计模式:设计模式基础知识和原则

设计模式

概念

模式是在某种情景下(Context)下,针对某问题的设计的某种解决方案。

  • 情景:是应用某个模式的情况。这应该是会不断出现的情况。
  • 问题:是你想在某情景下达到的目标,但也是某种情景下的约束
  • 解决方案:是你所求的一个通用的设计,可用来解决约束,达到目标。

分类

模式可以分为以下三种不同的类别:创建型、行为型和结构型。

  • 创建型:创建型模式涉及到对象实例化,这类模式都提供一个方法,将客户从所需要的实例化对象中解耦。
  • 行为性:只要是行为行为设计模式,都涉及到类和对象如何交互以及分配职责。行为设计模式的目的——对象之间的沟通与互联。
  • 结构性:结构性设计模式可以让你把类或者对象组合到更大的结构中。结构型模式用来描述类和对象如何被组合以建立新的结构或者新的功能。

分类细则

  • 二、创建型
      1. 单例(Singleton
      1. 简单工厂(Simple Factory)
      1. 工厂方法(Factory Method)
      1. 抽象工厂(Abstract Factory)
      1. 生成器(Builder)
      1. 原型模式(Prototype)
  • 三、行为型
      1. 责任链(Chain Of Responsibility)
      1. 命令(Command)
      1. 解释器(Interpreter)
      1. 迭代器(Iterator)
      1. 中介者(Mediator)
      1. 备忘录(Memento)
      1. 观察者(Observer)
      1. 状态(State)
      1. 策略(Strategy)
      1. 模板方法(Template Method)
      1. 访问者(Visitor)
      1. 空对象(Null)
  • 四、结构型
      1. 适配器(Adapter)
      1. 桥接(Bridge)
      1. 组合(Composite)
      1. 装饰(Decorator)
      1. 外观(Facade)
      1. 享元(Flyweight)
      1. 代理(Proxy)

设计原则

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。

  1. 针对接口编程,而不是针对实现编程

"针对接口编程"真正地意思是“针对超类型(supertype)编程”。可以更明确的说成“变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口”

  1. 多用组合,少用继承

使用组合构建系统具有很大的弹性,不仅可将算法封装成类,更可以“在运行时动态地改变行为”,只要组合的行为符合正确的接口标准即可。

  1. 为了交互对象之间的松耦合设计而努力

松耦合的设计之所以能够让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的依赖性降低到了最低。

  1. 类应该对扩展开发,对修改关闭

我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为。这样的设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求。

  1. 要依赖抽象,不要依赖具体类(依赖导致原则)

不能让高层组件依赖于低层组件,而且,不管高层组件还是底层组件,“两者”都应该依赖于抽象。

  1. 最少知识原则:只和你的密友谈话

不要让太多的类耦合在一起,免得修改系统中的一部分,会影响到其他部分。如果许多类相互依赖,那么这个系统就会变成一个易碎的系统,他需要花许多成本维护,也会因为太复杂而不容易被其他人了解。

  1. 好莱坞原则:别调用(打电话)我们,我们会调用(打电话给)你。

在好莱坞原则下,我们允许底层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些底层组件。换句话说,高层组件对待底层组件的方式是”别调用我们,我们会调用你们“。

  1. 单一责任原则:一个类应该只有一个引起变化的原因。

我们知道要避免类内的改变,因为修改代码很容易造成许多潜在的错误。如果有一个类具有两个变化的原因,那么这会使得将来该类的变化几率上升,而当它正在改变的时候,你的设计中同时又两个方面讲会受到影响。

作者地址:https://github.com/AlfredTheBest/Design-Pattern * Lesson 0[《设计模式简介》](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson0) * Lesson 1 [简单工厂模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson1) * Lesson 2 [策略模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson2) * Lesson 3 [单一原则和里氏替换原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson3) * Lesson 4 [依赖倒置原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson4) * Lesson 5 [接口隔离原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson5) * Lesson 6 [迪米特原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson6) * Lesson 7 [开闭原则](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson7) * Lesson 8 [修饰模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson8) * Lesson 9 [代理模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson9) * Lesson 10 [工厂方法模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson10) * Lesson 11 [原型模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson11) * Lesson 12 [模版方法模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson12) * Lesson 13 [外观模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson13) * Lesson 14 [建造者模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson14) * Lesson 15 [观察者模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson15) * Lesson 16 [抽象工厂模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson16) * Lesson 17 [状态模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson17) * Lesson 18 [适配器模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson18) * Lesson 19 [备忘录模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson19) * Lesson 20 [组合模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson20) * Lesson 21 [单例模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson21) * Lesson 22 [桥接模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson22) * Lesson 23 [命令模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson23) * Lesson 24 [责任链模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson24) * Lesson 25 [中介者模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson25) * Lesson 26 [享元模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson26) * Lesson 27 [解释器模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson27) * Lesson 28 [访问者模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson28)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值