设计模式:Design Patterns 《Design Patterns: Elements of Reusable Object-Oriented Software》一书的”四人组(GoF)提出的 23 种设计模式,是面向对 象
软件设计方面最有影响的书籍。 Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一 次又一次的使用该
方案而不必做重复劳动。 “设计模式就像围棋中的定式。 ” ” “学习设计模式必须了解它应用的场景,并在实践中不断体会”
框架( 和模式( 框架(Framework)和模式(Pattern)的区别:
1,设计模式比框架更抽象 2,设计模式是比框架更小的体系结构元素 3,框架比设计模式更加特例化 目标:提高代码的可维护性(maintainability)和复用性(reusability)。 原则: “开闭”原则 OCP(对扩展开放,对修改关闭) ,依赖倒转原则 DIP(要依赖于抽象,不要依赖于具体) ,里氏代 换原则 LSP(子类必须能替换父类的每一种情况,区分 Is-a 和 Has-a) ,组合优先原则(优先使用组合,而不是继承) 从 Java 语言
设计跨越到 Java EE
程序设计的“隐性”桥梁。 (更好
学习各种框架,理解各种框架设计原理,设计自己的 框架) 。 然而,模式固然重要,但也不能死套模式。 如果写个”Hello World”也要套模式的话,那你一定生病了。 Java 的特点,不支持多重继承,但提供了接口以间接实现多重继承(多态) 松散耦合,解耦设计 。 Java 的 GoF 设计模式实现主要表现在面向接口编程。 (继承,封装,多态) UML 简介:综合 OO 的建模语言、方法和过程,促进
问题的沟通、理解和解决。 常用图:类图:时序图,用例图,状态图
一般化关系:Java 中的继承(extends)和接口实现(implements) 关联关系:
Java 中的属性变量的引用 聚合关系: (关联关系的一种,强于关联关系,由语义决定) 合成关系: (关联关系的一种,强于聚合关系,由语义决定) 依赖关系:Java 中的方法中的变量引用 23 种 GoF 设计模式分成创建模式(5 种) 、结构模式(7 种) 、行为模式(11 种)三个大类。 创建模式: 创建模式 简单工厂模式
为什么用静态方法而不是 new 来创建对象? 好处 1:创建对象的方法有名称;好处 2:调用时不一定非要创建对象(分配内存,耗费资源) ;好处 3:返回的对象可
以是返回类型的子类对象。 举例:Boolean, Interger, Double 等类的 valueOf()方法 java.text.DateFormat 抽象类的 getDateInstance(int style)静态方法,如何体现多态性。 工厂模式的其他扩展:工厂方法模式、抽象工厂模式 单例模式: 单例模式 确保一个类只有一个实例(对象) ,而且自行实例化并向
系统提供这个实例(三个特性
) 。 要点:把构造方法私有化(保证外界无法实例化) ,提供静态工厂方法。介绍饿汉式(Eager)和饱汉式(Lazy)单例类(注 意加上 synchronized) 。 注意其局限,是在一个 JVM 内只有一个实例。 该类里的变量相当于全局变量(Java 里面没有直接提供全局变量) 缺点:构造方法私有,因此无法子类化。 实例:属性管理器,Java 中的 java.lang.Runtime 类(getRuntime()方法) ,java.awt.Toolkit 类(getDefaultToolkit()方法) 不应当使用的地方:数据库 Connection(为什么) 问题:观察 java.lang.Math 类,看它是否使用了单例模式,为什么。 结构模式: 结构模式 代理模式: 代理模式 给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
常用代理:远程代理、虚拟代理、JDK 支持的动态代理
抽象角色(秘书-局长) :声明真实对象(局长)和代理对象(秘书)的共同接口(秘书-局长) 可以用抽象类实现, 。
或者用接口来实现。 Java 的动态代理类位于 java.lang.reflect 包下,主要涉及两个类(接口) : (1),Interface InvocationHandler
该接口唯一的