模式开始-第二天

来源:互联网 发布:软件系统测试目的 编辑:程序博客网 时间:2024/06/08 05:48

引用大佬的blog:http://blog.csdn.net/lovelion/article/details/17517213


Class.forName(XX)  XX指的是类路径  带包名的那种哟



4.单例模式:
4.1 单例模式的三个要点: 
一个类只能有一个实例  
必须自行创建这个实例 
必须自行向整个系统提供这个实例
4.2 三种单例类的实现方式分别是饿汉式单例、懒汉式单例以及IoDH
IoDH 静态内部类成员
class Singleton {  
    private Singleton() {  
    }  
      
    private static class HolderClass {  
            private final static Singleton instance = new Singleton();  
    }  
      
    public static Singleton getInstance() {  
        return HolderClass.instance;  
    }  
      
    public static void main(String args[]) {  
        Singleton s1, s2;   
            s1 = Singleton.getInstance();  
        s2 = Singleton.getInstance();  
        System.out.println(s1==s2);  
    }  



5.原型模式: 可以通过一个原型对象克隆出多个一模一样的对象
5.1Java语言提供的clone()方法:
需要注意的是能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个Java类支持被复制。
如果一个类没有实现这个接口但是调用了clone()方法,Java编译器将抛出一个CloneNotSupportedException异常


5.2 深克隆与浅克隆
在深克隆中,除了对象本身被复制外,对象所包含的所有成员变量也将复制
在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;
如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象


5.3 深克隆
在Java语言中,如果需要实现深克隆,可以通过序列化(Serialization)等方式来实现。
序列化就是将对象写到流的过程,写到流中的对象是原有对象的一个拷贝,而原对象仍然存在于内存中


通过序列化实现的拷贝不仅可以复制对象本身,而且可以复制其引用的成员对象,
因此通过序列化将对象写到一个流中,再从流里将其读出来,可以实现深克隆
需要注意的是能够实现序列化的对象其类必须实现Serializable接口,否则无法实现序列化操作


5.4 克隆模式的缺点:
需要为每一个类配备一个克隆方法,而且克隆方法位于一个类的内部,
当需要改造类时,需要修改源代码,违背了“开闭原则”


深克隆实现如果涉及到多重嵌套引用时比较麻烦


5.5 克隆模式的使用场景:
1.创建新对象成本较大(初始化使用时间较长,占用太多的CPU资源或网络资源)
2.需要避免使用分层次的工厂类来创建分层次的对象,并且类的实例对象只有一个或很少的几个组合状态




6.建造者模式又称为生成器模式,该模式为客户端返回的不是一个简单的产品,而是一个有多个部分组成的复杂产品
复杂对象/产品是指那些包含多个成员属性的对象,这些成员属性也称为部件或零件
6.1 核心:
1.产品 --很多属性
2.创建者(很多针对属性的抽象方法,结合钩子函数(isXX)[具体创建者可以重写实现]来设置属性)
3.指挥者(可以设置属性的创建顺序也可以将该创建的责任直接放入创建者中)

原创粉丝点击