1.设计模式概述
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式不是一种方法和技术,而是一种思想
设计模式和具体的语言无关,学习设计模式就是要建立面向对象的思想,尽可能的面向接口编程,低耦合,高内聚,使设计的程序可复用
学习设计模式能够促进对面向对象思想的理解,反之亦然。它们相辅相成
2设计模式的几个要素
名字:必须有一个简单,有意义的名字
问题:描述在何时使用模式
解决方案 :描述设计的组成部分以及如何解决问题
效果 :描述模式的效果以及优缺点
3.设计模式的分类
A:创建型模式 :对象的创建
简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式。(6个)
B:结构型模式 :对象的组成(结构)
外观模式、适配器模式、代理模式、装饰模式、桥接模式、组合模式、享元模式。(7个)
C:行为型模式 :对象的行为
模版方法模式、观察者模式、状态模式、职责链模式、命令模式、访问者模式、策略模式、备忘录模式、迭代器模式、解释器模式。(10个)
4.简单工厂模式:
A:简单工厂模式概述:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
B:优点:客户端不需要在负责对象的创建,从而明确了各个类的职责
C:缺点:这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
5.工厂方法模式:
A:工厂方法模式概述:工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
B:优点:客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
C:缺点:需要额外的编写代码,增加了工作量
6.单例设计模式之饿汉式:类一加载就创建对象
A:单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供。
B:优点:
在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
C:缺点:
没有抽象层,因此扩展很难。
职责过重,在一定程序上违背了单一职责
D:如何设计单例模式?
a.把构造方法私有
b.在成员位置自己创建一个对象(此时就要new)
c.通过一个公共方法提供访问该对象
注意:由于外界不能创建对象,所以只能通过类来访问,因此该公共方法必须加static修饰,所以该成员对象也必须加static修饰。
为了保证该对象不会被外部所修改,因此需要加private修饰,确保访问只能通过该公共方法。
7.单例设计模式之懒汉式:用的时候采取创建对象
A.把构造方法私有
B.在成员位置自己创建一个对象,但是该对象此时不new,只赋值null
C.通过一个公共方法提供访问该对象,在方法中添加一个判断该对象是否为null,是null的话才new。
面试题:单例模式的思想是什么?请写一个代码体现
开发:饿汉式(不会出问题的单例模式)
面试:懒汉式(可能会出问题的单例模式)
A:懒汉式(延迟加载)
B:线程安全问题(对公共方法上锁即可)
8.单例模式用例:Runtime类(饿汉式)
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接
public Process exec(String command):(throws IOException) 在单独的进程中执行指定的字符串命令。
Runtime r = Runtime.getRuntime() ;
r.exec("notepad") ; //打开记事本
r.exec("calc") ; //打开计算器
r.exec("shutdown -s -t 10000") ; //计算机在10000秒后关机
r.exec("shutdown -a") ; //取消关机计划