设计模式补漏
聚合关系:表示整体和部分的关系,部分可以脱离整体而存在
组合关系:也表示整体和部分的关系,但是整体和部分由相同的生命周期
1.单例模式分为懒汉式和饿汉式
饿汉式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public Singleton getInstance(){return singletion;}
}
懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static synchronized synchronized getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
2.实现相对于单例模式的多例模式
3.原型模式中的浅复制和深复制
浅复制:如果是基本类型的话,那么直接拷贝一份,如果是对象的话,则复制引用,也就是指向原对象。
深复制:不论是基本类型,还是对象,都复制一份,还原对象完全区分开
4.简单工厂模式又叫做静态工厂模式
5.享元模式:
若一个对象的状态可以分为内部状态和外部状态,但是内部状态较多时,我们使用享元模式,先保存对象内部状态
到一个工厂,然后使用时直接返回这个对象给另一个对象,多个对象共享这个对象的内部状态,然后在对另一个对象
设置外部状态,当大量相似对象很多时,用共享对象代替内部状态,只用设置外部状态。(外部状态不属于对象的一部分)
6.外观模式:提供统一的接口,封装复杂逻辑
7.代理模式:声明一个抽象主题,然后代理和真是主题继承自抽象主题,代理中保存抽象主题的实例
虚拟代理:要创建一个资源消耗大的对象,先创建一个资源消耗小的对象,真是对象只有在使用时才被创建
远程代理:位于不同地址空间中的对象提供一个本地代理对象
保护代理:控制一个对象的访问,可以给不同用户,不同级别的访问
8.桥接模式:将抽象化和实例化解耦,使二者可以独立的变化(不同平台播放不同的视频文件)
9.适配器模式:对接口进行改造,是接口不兼容的那些类可以正常的工作
10.组合模式:通过组合多个对象,形成树形结构,以表示整体和部分的关系,一般包括,抽象主题,然后实体主题和容器继承抽象主题,比如文件和文件夹的关系。
11.观察者模式:定义了一种一对多的关系模式,有一个主题,可以添加和删除观察者,当一个对象发生改变的时候,其相关对象都得到通知并被自动更新。
12.职责链模式:一个请求没有被应答是会沿着链往上走,知道找到相应的对象来应答
13.命令模式:将执行命令和发出命令分别封装成不同的对象,一方不必要知道另一方的接口
14:解释器模式:对应解释型的语言的类型
//文法如下 expression::= direction action distance | composite composite::=expression 'and' expression direction::='up' | 'down' | 'left' | 'right' action::='run'| 'move' distance::=an integer abstract class AbstractNode() { public abstract String interpret(); } //and解释器 class AndNode extends AbstractNode() { private AbstractNode left; private AbstractNode right; public AndNode(AbstractNode left,AbstractNode right) { this... } public String interpret() { left.interpret()+"再"+right.interpret(); } }
可以用这个模式来定义解释器。。。。