写在前面: 本片文章只是记录了自己学习时的一些笔记,纯粹是为了自己后面方便查找,片言碎语,不适合大家浏览,请大家不要参考这篇文章。
正文:
1、UML简介与入门
Unified Modeling Language,统一建模语言或标准建模语言,是一个OMG标准,OMG:Object Management Group,对象管理组织。
2、UML类图详细介绍(上)
(1)、类
矩形框代表一个类,该类图分为三层,第一层显示类的名称;第二层是类的特性,通常是成员变量和属性(attribute);第三层是类的操作,通常是方法或函数(operation)
(2)、接口
圆圈或者方框
3、UML类图详细介绍(下)
(1)、类与继承泛化(Generalization)
泛化关系:是一种继承关系,表示一般(父类)与特殊(子类)的关系,制定了子类如何特化父类的所有特征和行为。
箭头指向:带三角箭头的实线,箭头指向父类
代码表现:最典型的是extends
(2)、接口与实现(Realization)
实现关系:是一种类与接口的关系。
箭头指向:带三角箭头的虚线,箭头指向接口或是直线连接圆圈
代码实现:最典型的就是implements
(3)、依赖(Dependency)
依赖关系:是一种使用的关系,即一个类的实现需要另一个类的协助,尽量不使用双向的依赖关系。
代码表现:最典型的就是import
(4)、关联(Association)
关联关系:是一种拥有的关系,它使一个类知道另一个类的属性和方法,关联可以是单向的也可以是双向的。
代码体现:成员变量
箭头指向:带普通箭头的实心线,指向被拥有者。
(5)、聚合(Aggregation)
聚合关系:整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
代码体现:成员变量
箭头指向:带空心菱形的实心线,菱形指向整体。
(6)、组合(Composition)
组合关系:整体与部分的关系,但部分不能离开整体而单独存在。
代码体现:成员变量
箭头指向:带实心菱形的实线,菱形指向整体。
4、面向对象设计之单一职责原则SRP
(1)、SRP:Single Responsibitity Principle :一个类只负责一个功能领域中的相应原则。
5、面向对象设计之开放封闭原则OCP
(1)、OCP: Open-Closed Principle :对扩展开放,对修改关闭,即软件实体应尽量在不修改原有代码的情况下进行扩展。
6、面向对象设计之里氏替换原则LSP
(1)、LSP:Liskov Substitution Principle,子类型必须能够替换他们的基类型,一个软件如果使用的是一个基类,那么当把这个基类替换成继承该基类的子类,
程序的行为不会发生任何变化。软件实体察觉不出基类对象和子类对象的区别。
7、面向对象之依赖倒置原则DIP
(1)、DIP:Dependence Inversion Principle,要依赖于抽象,不要依赖于具体。客户端依赖于抽象耦合。
8、面向对象之接口隔离原则ISP
(1)、ISP:Interface Segregation Principle,使用多个专一功能的接口比使用一个总接口要好。
9、面向对象之迪米特法则LKP
(1)、LKP,又叫做最少知识原则(Least Knowledge Principle),对象与对象之间应该使用尽可能少的方法来关联,避免千丝万缕的联系。
10、设计模式之单例模式(Singleton)(上)
(1)、设计模式(Design pattern)
(2)、设计模式分类:有6个具体的创建型模式
简单工厂模式(Simple Factory)
工厂方法模式(Factory Method)
抽象工厂模式(Abstrace Factory)
创建者模式(Builder)
原型模式(Prototype)
单例模式(Singleton)
(3)、单例模式:一个类有且只有一个实例,并且自行实例化向整个系统提供。
关键点:某个类只有一个实例;private static
必须自行创建这个实例;private
必须自行向整个系统提供这个实例;
解决的问题:提供全局需要使用的,唯一的数据访问。
成员:静态的实例
方法:私有构造方法和静态的获取实例方法
创建的时机分类:
饿汉式(hungry):在类加载时创建
懒汉式(lazy):在使用时做判断,如果需要再创建
11、设计模式之单例模式(Singleton)(下)
(1)、单例模式线程安全问题:
饿汉式(hungry):线程安全,但过早的浪费资源
懒汉式(lazy):用的时候才创建节约资源,但为线程安全需要付出额外的代价。
(2)、线程安全懒汉式单例模式
Synchronized 方法
双重检测锁单例模式
内部类Holder式(建议使用)
12、设计模式之工厂模式
(1)、工厂模式分三种:简单工厂、工厂方法、抽象工厂
(2)、工厂模式之简单工厂模式(Simple Factory Pattern)
属于类的创新型模式,又叫静态工厂方法模式(Static Factory Method Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
工厂模式之工厂方法
(1)、即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。
工厂模式之抽象工厂模式
(1)、提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。
15、设计模式之代理模式
·
(1)、代理模式(proxy pattern),在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在这两个对象之间起到中介作用。
16、设计模式之JAVA动态代理
(1)、静态代理:自己手写的代理类,就是在程序运行前就已经存在的编译好的代理类
动态代理:如果代理程序运行前并不存在,需要在程序运行时动态生成(无需手工编写代理类源码)。
如何生成:根据Java的反射机制动态生成。
(2)、Java动态代理(Dynamic Proxy)
Java中要创建一个代理对象,必须调用Proxy类的静态方法newProxyInstance,原型如下:
Object Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler)
loader:类型加载器,对于不同来源的类需要不同的类加载器来加载。
interfaces:被代理对象共有的接口;
handler:调用处理器,必须是实现了InvocationHandler接口的对象,其作用是定义代理对象中需要执行的具体操作。
InvocationHandler:
InvocationHandler 之于Proxy,就如Runnable之于Thread,InvoacationHandler接口只有一个方法invoke,他的作用就跟Runnable 中的run方法类似,
定义了代理对象在执行真实对象的方法时所希望执行的动作,原型如下:
Object invoke(Object proxy,Method method,Object[] args) throws Throwable
proxy,表示执行这个方法的代理对象
method,表示真实对象实际需要执行的方法
args,表示真实对象实际执行方法时所需的参数。
17、设计模式之适配器模式(上)
(1)、适配器模式(Adapter pattern)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本接口不兼容而不能一起工作的那些类可以一起工作。
18、设计模式之适配器模式(下)
(1)、
19、设计模式之观察者模式(上)
(1)、观察者模式(Observer pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。
20、设置模式之观察者模式(下)
(1)、
21、设计模式之策略模式
(1)、策略模式:Strategy Pattern,定义了一些列的算法,并将每一个算法封装起来,而且使他们还可以互相替换。策略模式让算法独立于使用它的客户而独立变化。
22、复合模式与反模式
(1)、MVC(Model View Controller)模型视图控制器 复合模式
常见的MVC框架: 服务器常用的Spring、Android客户端
(2)、MVP(Model View Presenter)