JAVA-类的设计原则
时间:2021-07-31
本文章向大家介绍JAVA-类的设计原则,主要包括JAVA-类的设计原则使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.内聚性
- 类应该描述一个单一的实体,而所有的类操作应该在逻辑上相互契合来支持一个一致的目的.
- 若一个实体承担太多职责,应该按照各自的职责分成几个类. eg.String,StringBuilder,StringBuffer
2.一致性
- 遵循Java程序设计风格和命名习惯.(通常将数据声明置于构造方法之前,将构造方法置于普通方法之前)
- 选择名字要把保持一致(相同的操作选择相同的名字).
- 一般来说,应具有一致性地提供一个公共无参构造方法,用于构建默认实例.
- 若不想让用户创建类的对象(只是用其方法),可以在类中声明一个私有的构造方法.
(Math类,GuessDate类)
3.封装性
- 一个类应该使用private修饰符隐藏其数据以免用户直接访问(使得类更易维护)
- 只有希望数据域可读的情况下才提供获取方法;也只在希望数据域可更新的情况下提供设置方法.
4.清晰性
- 为使设计清晰,内聚性,一致性,封装性都是很好的设计原则.
- 类还应该有一个很清晰的合约,从而易于解释和理解.
- 用户可以以各种不同组合,不同顺序以及在各种环境中结合使用多个类
- 设计类不应限制用户如何以及何时使用;
- 设计属性时应允许用户按任何顺序和组合设置值;
- 设计方法应使得功能的实现和他们出现的顺序无关.
- 方法应在不产生混淆的情况下进行直观定义.
- 不应该声明一个可以从其他数据域推导出来的数据域.(birthDate, age)
5.完整性
- 一个类应通过属性和方法提供各种自定义功能的实现方式.
6.实例和静态
- 依赖于类的具体实例的变量或方法必须是一个实例变量或方法;若一个变量被类中所有实例所共享,其应被声明为静态.
- 应该总是使用类名(而非引用变量)引用静态变量和方法,以增强可读性并避免错误.
- 不要从构造方法中传入参数来初始化静态数据域,最好使用静态方法改变/设置静态数据域.
- 实例和静态是面向对象程序设计不可或缺的部分,不要忽视静态数据域或方法.
- 构造方法永远都是实例方法(因为其用来创建具体实例);不能从静态方法中调用实例变量或方法.
7.继承和聚合
- 继承:is-a(是一种)
eg.苹果是一种水果. - 聚合:has-a(具有)
eg.人具有名字.
8.接口和抽象类
- 抽象类:比较强的is-a (更具体)
- 接口:较弱的is-a (更普适)
- 接口比抽象类更灵活(一子类只能继承一父类,但却可实现任意数目接口)
- 接口不能包含数据域(变量).
原文地址:https://www.cnblogs.com/jingqz/p/15085296.html
- python实现字符串模糊匹配
- 动态规划之01背包详解【解题报告】
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
- HDU 2546 饭卡(01背包裸题)
- 漫谈文件系统
- AI知识搜索利器:基于ElasticSearch构建专知实时高性能搜索系统
- 【深度干货】专知主题链路知识推荐#5-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程01
- hihoCoder #1043 : 完全背包(板子题)
- 【深度干货】专知主题链路知识推荐#7-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程02
- hihoCoder #1038 : 01背包(板子题)
- 最小二乘法多项式曲线拟合原理与实现
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
- 一文看懂ovirt的supervdsmd服务
- openstack如何扩展API之二:扩展原有核心API
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Yii2框架加载css和js文件的方法分析
- php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
- python如何求圆的面积
- php实现微信公众号企业转账功能
- PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
- Python之Matplotlib文字与注释的使用方法
- Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
- python中return如何写
- PHP钩子实现方法解析
- 浅谈numpy中函数resize与reshape,ravel与flatten的区别
- PHP文件类型检查及fileinfo模块安装使用详解
- PHP封装的分页类与简单用法示例
- ThinkPHP3.2框架自带分页功能实现方法示例
- PHP获取访问设备信息的方法示例
- PHP实现微信提现功能