文档章节

高效java

P
 Pxc_春春彭
发布于 2016/11/21 11:36
字数 494
阅读 1
收藏 0

一、创建、销毁对象

1、考虑用静态工厂方法替代构造器

2、遇到多个构造器参数时要考虑用构建器

静态工厂和构造器有一个共同的局限性,它们不能很好的扩展到大量的可选参数,程序员一向习惯采用重叠构造器,在这种模式下,提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,最后一个构造器包含所有的可选参数。

public People(String name,String sex){
  this(name,sex,0,0,0,"");
}
public People(String name,String sex,int age){
  this(name,sex,age,0,0,"");
}
public People(String name,String sex,int age,float height,float wigth){
  this(name,sex,age,height,wigth,"");
}
public People(String name,String sex,int age,float height,float wigth,String skin){
  this.name=name;
  this.sex=sex;
  this.age=age;
  this.height=height;
  this.wigth=wigth;
  this.skin=skin;
}

重叠的构造器方法可行,但是当有许多参数的时候,代码很难编写,并且难以阅读。

Builder方法:

public class People {
    private final String name;
    private final String sex;
    private final String address;
    private final float height;
    private final float weight;

    public People(Builder builder) {
        name = builder.name;
        sex = builder.sex;
        address = builder.address;
        height = builder.height;
        weight = builder.weight;
    }
}

public class Builder {
    public String name;
    public String sex;
    public String address;
    public float height;
    public float weight;

    public Builder(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public Builder setAddress(String address) {
        this.address = address;
        return this;
    }

    public Builder setHeight(float height) {
        this. height = height;
        return this;
    }

    public Builder setWeight(float weight) {
        this.weight = weight;
        return this;
    }

    public People build() {
        return new People(this);
    }
}


public class MainClass {
    public static void main(String[] args){
        People people = new Builder("pxc","女").setAddress("福州").setHeight(163).setWeight(45).build();
       
    }
}

运行结果:通过builder方法把参数写入对象中。

Builder模式易于阅读,参数灵活。

第四章 类和接口

1、使类和成员的可访问性最小化:尽可能使每个类或者成员不被外界访问。

实例域不能是共有的:包含共有可变域的类并不是线程安全的。

2、使可变性最小化

    2.1 不提供任何机会会修改对象状态的方法

    2.2 保证类不会被扩展

© 著作权归作者所有

共有 人打赏支持
P
粉丝 2
博文 51
码字总数 53856
作品 0
程序员
[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱?

[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱? 曾经的我经常害怕处理与JVM相关的异常,对JVM的配置参数也一无所知,那时候我天真地认为,JVM的出现本身就是想让程序员屏蔽实现细节,...

原创小博客
07/19
0
0
Berkeley DB数据库学习1

BDB使用教程 Berkeley DB是历史悠久的嵌入式数据库系统,在06年被 Oracle 收购了。现在我们在 Oracle 网站上会看到: BerkeleyDB、BerkeleyDB XML 和 BerkeleyDB JAVA Edition 这个三个东东。...

月下独酌100
2013/02/17
0
0
使用ConcurrentMap实现高效可靠的原子操作

问题:服务器S1从远程获取多个文件到本地处理。这些文件的数据会被Processor转换成不同类型的数据模型存放至S1的数据库。每个Processor处理逻辑是相互独立的,但是同一个文件的数据可能会被多...

屈想顺
06/14
0
0
Java开发每日复盘2018_0511

今天主要跟大家来分享一下「MyBatis的使用」 一句话概括: 「MyBatis」,是一种介于Java对象与数据库(MySql等)之间的用于持久化存储的框架。 使用「MyBatis」好处: 可以更高效的,基于该框...

ZeroOSTalk
05/13
0
0
Groovy轻松入门-通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分。 Groovy和Java的不...

Sub
2013/03/08
0
1

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
1
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部