EffectiveJava(一) 静态工厂方法


layout: post

title: 静态工厂方法

categories: Design Pattern

description: 静态工厂方法

keywords: Design Pattern


Design Pattern & Idiom(Gamma 95 【设计模式领域的标准参考书】)

代码的清晰与整洁最为重要:模块的用户永远也不该被模块的行为所迷惑(那样就不清晰了),模块要尽量的小,但又不能太小【本书使用的术语模块,是指任何可重用的软件组织,从单个方法到包含多个包的复杂系统都可以是一个模块】,代码应该被重用而不是被拷贝。模块的依赖性应该降到最小。

ps
指令重排:
原子操作:
内存屏障:

volatile:果一个变量加了volatile关键字,就会告诉编译器和JVM的内存模型:这个变量是对所有线程共享的、可见的,每次jvm都会读取最新写入的值并使其最新值在所有CPU可见。

优点:
1.1.静态工厂第一个优势:他们有名称,可以确切的描述正被返回的对象
1.2.静态工厂第二个优势:不必每次调用它们的时候都创建一个新对象
1.3.静态工厂第三个优势:他们可以返回类型的任何子类型对象
1.4.静态工厂第四个优势:在创建参数化类型实例的时候,他们是代码变得更加简洁
1.5.静态工厂第五个优势:静态工厂方法可以减少对外暴漏属性,以防调用者出错
1.6.静态工厂第六个优势:可以根据场景自定义返回对象

代码解析

1.1 拥有清晰的名称,轻易的区分角色类型

public class RoleFactory {

    public static Role getParent(){
        return new Parent();
    }
    public static Role getStudent(){
        return new Student();
    }
    public static Role getTeacher(){
        return new Teacher();
    }
}

1.2 不必每次调用它们的时候都创建一个新对象

/*
 *synchronized(类的名.class) 
 *每个类在jvm里面只有一个唯一的字节码,所以.class是唯一的,无论多少对象,共用此同一把锁。
 */

你可能感兴趣的:(EffectiveJava(一) 静态工厂方法)