发表时间:2022-03-25来源:网络
如果参数很多,会导致构造方法非常多,拓展性差,代码难编写,且难以看懂。
用 JavaBeans 模式, get 和 set 一行构造编程多行代码实现,需要使用额外机制确保一致性和线程安全。
用 builder 模式
5 个或者 5 个以上的成员变量参数不多,但是在未来,参数会增加属于对象的创建模式,一般有
抽象建造者:一般来说是个接口,包含产品类
/** * @author dujiayu * @version V1.0 * @Package com.djy.demo.builder * @date 2020/7/7 22:35 * @Copyright 完整构造者模式 */ public class Computer1 { private String cpu;//必须 private String ram;//必须 private int usbCount;//可选 private String keyboard;//可选 private String display;//可选 public Computer1(String cpu, String ram) { this.cpu = cpu; this.ram = ram; } public void setUsbCount(int usbCount) { this.usbCount = usbCount; } public void setKeyboard(String keyboard) { this.keyboard = keyboard; } public void setDisplay(String display) { this.display = display; } @Override public String toString() { return "Computer{" + "cpu='" + cpu + '\'' + ", ram='" + ram + '\'' + ", usbCount=" + usbCount + ", keyboard='" + keyboard + '\'' + ", display='" + display + '\'' + '}'; } }抽象构建者类
/** * @author dujiayu * @version V1.0 * @Package com.djy.demo.builder * @date 2020/7/7 22:40 * @Copyright 抽象构建者类 */ public abstract class ComputerBuilder1 { public abstract void setUsbCount(); public abstract void setKeyboard(); public abstract void setDisplay(); public abstract Computer1 getComputer(); }指导者类(Director)
/** * @author dujiayu * @version V1.0 * @Package com.djy.demo.builder * @date 2020/7/7 22:47 * @Copyright 指导者类(Director) */ public class ComputerDirector1 { public void makeComputer(ComputerBuilder1 builder) { builder.setUsbCount(); builder.setDisplay(); builder.setKeyboard(); } }实体构建者类
/** * @author dujiayu * @version V1.0 * @Package com.djy.demo.builder * @date 2020/7/7 22:43 * @Copyright 实体构建者类 */ public class MacComputerBuilder1 extends ComputerBuilder1 { private Computer1 computer; public MacComputerBuilder1(String cpu, String ram) { computer = new Computer1(cpu, ram); } @Override public void setUsbCount() { computer.setUsbCount(2); } @Override public void setKeyboard() { computer.setKeyboard("苹果键盘"); } @Override public void setDisplay() { computer.setDisplay("苹果显示器"); } @Override public Computer1 getComputer() { return computer; } }演示类
/** * @author dujiayu * @version V1.0 * @Package com.djy.demo.builder * @date 2020/7/7 22:48 * @Copyright 演示 */ public class BuilderMain { public static void main(String[] args) { ComputerDirector1 director = new ComputerDirector1();//1 ComputerBuilder1 builder = new MacComputerBuilder1("I5处理器", "三星125");//2 director.makeComputer(builder);//3 Computer1 macComputer = builder.getComputer();//4 System.out.println("mac computer:" + macComputer.toString()); } }如,一些工具类提供的都是静态方法,这些类是不应该提供具体的实例的。可以参考 JDK 中的 Arrays。 好处:防止使用者 new 出多个实例。
可以在类的多个实例之间重用的成员变量,尽量使用 static。finalizer 方法,jdk 不能保证何时执行,也不能保证一定会执行。如果有确定要释放的资源应该用 try/finally。
尽量使类不可变,不可变的类比可变的类更加易于设计、实现和使用,而且更不容易出错,更安全。
常用的手段:
不提供任何可以修改对象状态的方法;使所有的域都是 final 的。使所有的域都是私有的。使用写时复制机制。可变参数是允许传 0 个参数的
如果是参数个数在 1~多个之间的时候,要做单独的业务控制。
方法的结果返回 null,会导致调用方的要单独处理为 null 的情况。返回零长度,调用方可以统一处理,如使用 foreach 即可。 JDK 中也为我们提供了 Collections.EMPTY_LIST 这样的零长度集合
要尽量追求代码的重用,同时减少类加载的数目,提高类装载的性能。
常用的异常:
IllegalArgumentException – 调用者传递的参数不合适IllegalStateException – 接收的对象状态不对,NullPointerExceptionUnsupportedOperationException –不支持的操作声明的一个枚举本质就是一个类,每个具体的枚举值就是这个枚举类的实例。
使用常量容易在写代码时写错使用常量如果要使用描述时比较麻烦其他类使用常量时,类编译时会把常量值直接写到字节码中,如果常量值有变化,所有相关的类需要重新编译,否则会不可预料的错误枚举和行为绑定
所谓枚举的本质就是一个类,而枚举中定义的每一个具体的枚举类型其实就是这个枚举类的一个实例。
float 和 double 在 JVM 存储的时候,有部分要做整数位,有部分要做小数位,所以存在精度上的问题 可以使用 int 或者 long 以及 BigDecimal
在存在大量字符串拼接或者大型字符串拼接的时候,尽量使用 StringBuilder 和 StringBuffer
宜搜小说快读版官方版下载v3.16.7 最新安卓版
26.47MB |资讯阅读
艾可直播app下载v5.1.46 安卓版
141.29MB |影音播放
epermarket这样生活app下载v6.1.9 安卓官方版
28.14MB |生活服务
万位车联官方版下载v3.1.19 安卓版
64.12MB |系统工具
驾驶伴侣官方版下载v12.10 安卓版
360.63MB |系统工具
linecamera小熊相机安卓版免费下载v17.5.3 官方最新版本
152.91MB |拍摄美化
弹唱小吉他软件下载v2.1.3 安卓手机版
30.73MB |社交娱乐
车车助手行车记录仪(carassist)下载v3.4.9 安卓版
23.63MB |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14