惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
月光博客
月光博客
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
Recent Commits to openclaw:main
Recent Commits to openclaw:main
E
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
AI
AI
T
Troy Hunt's Blog
S
Security Archives - TechRepublic
Cisco Talos Blog
Cisco Talos Blog
博客园 - 聂微东
MyScale Blog
MyScale Blog
B
Blog RSS Feed
爱范儿
爱范儿
N
News and Events Feed by Topic
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
V
V2EX - 技术
博客园 - Franky
AWS News Blog
AWS News Blog
L
Lohrmann on Cybersecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
S
Security Affairs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
News | PayPal Newsroom
Martin Fowler
Martin Fowler
P
Palo Alto Networks Blog
S
SegmentFault 最新的问题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
Know Your Adversary
Know Your Adversary
V
Visual Studio Blog
博客园 - 【当耐特】
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
aimingoo的专栏
aimingoo的专栏
The Last Watchdog
The Last Watchdog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tenable Blog
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog

浮华生

Elasticsearch 检索性能优化 - 浮华生 舆情监控系统综述 - 浮华生 2024 半年度总结 - 浮华生 2023 年终总结 - 浮华生 异地机器组网方案 - 浮华生 Kubernetes 部署 Elasticsearch 和 Kibana - 浮华生 2022 年终总结 - 浮华生 RabbitMQ connection channel 的关系 - 浮华生 Kafka Java 客户端 Producer 原理分析 - 浮华生 RabbitMQ 和 Kafka 应用原理简单对比 - 浮华生 阿里云 OpenSearch 介绍 - 浮华生 Golang Array 和 Slice 区别 - 浮华生 Mac OS 下打造 golang nvim 编程环境之基础配置 - 浮华生 电商搜索技术总结 - 浮华生 电商搜索业务总结 - 浮华生 2021 年终总结 - 浮华生 Cypress 实践总结 - 浮华生 年终总结 - 浮华生 关于我 - 浮华生 使用 cucumber 进行行为驱动开发(BDD) - 浮华生 微服务应用集成 SpringCloud 步骤 - 浮华生 电商搜索数据同步方案 - 浮华生 通过一道数值转换题重温计算机补码 - 浮华生 macOS 系统推荐的一些软件 - 浮华生 DevOps 实施规划(持续更新) - 浮华生 rabbitmq 如何提高可靠性并保证消费端幂等 - 浮华生 AMQ Model总结 - 浮华生 结对编程 - 浮华生 RSocket 介绍 - 浮华生 企业平台技术框架 - 浮华生 对创业的思考 - 浮华生 知难行易 - 浮华生 一年工作经验总结 - 浮华生 我与领域驱动之缘 - 浮华生 TDD 中使用的工具 - 浮华生 tf-idf 算法 - 浮华生 gitlab 添加代码规范检测 - 浮华生 query 改写 - 浮华生 阶段性总结 - 浮华生 操作系统作用 - 浮华生 - 浮华生 hamming-distance - 浮华生 ElasticSearch API 基本操作 - 浮华生 elasticsearch 集群容错 - 浮华生 ElasticSearch 基础概念 - 浮华生 技术选型怎么做 - 浮华生 条件概率、全概率与贝叶斯公式 - 浮华生 年终总结 - 浮华生 迁移到 ubuntu18 的问题及配置 - 浮华生 总结 - 浮华生 使用 psi-probe 监控 Tomcat - 浮华生 Tomcat 远程 Debug - 浮华生 jstack 死循环和死锁定位 - 浮华生 jmap & mat 内存溢出 - 浮华生 JVM 常用参数查看 - 浮华生 周总结(8.13-8.19) - 浮华生 周总结(7.30-8.4) - 浮华生 使用移位运算符 - 浮华生 master 公式 - 浮华生 VMware 12 NAT网络下配置 ubuntu 16.04 LTS 系统静态 IP - 浮华生 关于进制的计算 - 浮华生 项目总结 第三篇 - 浮华生 项目总结 第二篇 - 浮华生 editor.md 富文本编辑器的使用 - 浮华生 项目总结 第一篇 - 浮华生 2017至今总结 - 浮华生 谈谈微服务 - 浮华生 单例模式 - 浮华生 tor 使用 - 浮华生 归档 - 浮华生 搜索 - 浮华生 搜索 && 推荐 - 浮华生
面向对象的理解 - 浮华生
浮华生 · 2019-10-08 · via 浮华生

背景

说起面向对象的特征,大多数人肯会不加思索的答封装、继承、多态,可能还有抽象。最近在学 DDD 的时候,感觉它更加合理的运用了设计模式和面向对象的思想去解决复杂的业务场景,还有是阅读源码的时候也会看到大量的设计模式,所以说 Design Pattern 和 Object-Oriented 熟练的话会提升很大的代码质量(编程范式后续还会讲函数式和响应式)。

下面只说自己的体会和见解,如有异议欢迎留言。

四大特征

抽象

抽象,隐藏与上下文无关的信息,抽象的目的是为了简单,从宏观的角度去处理问题,举例:你开车去上班,但你只要知道车能带你到公司而不用在乎车内部的复杂零件是如何做工的,此时车就抽象成为一个整体。

封装

将功能相近的代码放到同一个类中,这样做的好处是能够进行解耦让不同的代码各司其职,具体细分为 Information hidingImplementation hiding

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
/**
* 通过 访问修饰符 讲一些细节保留在当前类中,而一些相对外开放的则使用 public 进行修饰
*
*/
class InformationHiding 
{
    //Restrict direct access to inward data
    private ArrayList items = new ArrayList();
 
    //Provide a way to access data - internal logic can safely be changed in future
    public ArrayList getItems(){
        return items;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
interface ImplemenatationHiding {
    Integer sumAllItems(ArrayList items);
}
class InformationHiding implements ImplemenatationHiding
{
    //Restrict direct access to inward data
    private ArrayList items = new ArrayList();
 
    //Provide a way to access data - internal logic can safely be changed in future
    public ArrayList getItems(){
        return items;
    }
 
    public Integer sumAllItems(ArrayList items) {
        //Here you may do N number of things in any sequence
        //Which you do not want your clients to know
        //You can change the sequence or even whole logic
        //without affecting the client
    }
}

继承

继承就是子类继承父类并可以父类或者重写父类的方法,这样做能让基础功能代码复用,但是现在有一种说法是组合优先于继承,因为继承也有自身的局限性,容易把代码写死。

多态

这里的个人理解就是一段代码写在不同的业务场景下有不同的功能,通过重载或者重写,其正规的说法是:

In java language, polymorphism is essentially considered into two versions:

  • Compile time polymorphism (static binding or method overloading)
  • Runtime polymorphism (dynamic binding or method overriding)