博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计原则
阅读量:6443 次
发布时间:2019-06-23

本文共 1386 字,大约阅读时间需要 4 分钟。

hot3.png

一、OO设计基础

1、封装

2、继承

3、多态

4、抽象

二、OO设计原则

1、找出应用中需要变化之处,让它们独立出来,不要和那些不需要变化的代码混在一处。

2、针对接口编程,而不是针对实现编程。

针对接口编程,即“针对超类型编程”。针对接口编程,关键就在于多态。利用多态,程序可以针对超类型编程,不会被绑死在超类型的行为上。

示例:有一个抽象类Animal,有两个具体的实现(Dog与Cat)继承Animal。

针对实现编程:

Dog d = new Dog();d.bark();

针对接口/超类型编程:

Animal a = new Dog();a.makeSound();

更进一步,子类实例化的动作不再需要在代码中硬编码,而是在运行时才指定具体的对象:

a = getAnimal();a.makeSound();

3、多用组合,少用继承。

4、为了交互对象之间的松耦合设计而努力。

5、开放-关闭原则:类应该对扩展开放,对修改关闭。

      应用该原则时,应该把注意力集中在设计中最有可能改变的地方,然后应用开放-关闭原则。  

6、依赖倒置原则

      要依赖抽象,不要依赖具体类。

      这个原则看上去很像“针对接口编程,而不是针对实现编程”,然而这里更强调抽象。这个原则说明了:不能让高层组件依赖低层组件,而且不管是高层还是低层组件,两者都应该依赖于抽象。所谓“高层”组件,是由其他低层组件定义其行为的类。例如,PizzaStore是个高层组件,因为它的行为是由比萨定义的:Pizza创建所有不同的比萨对象,准备、烘烤、切片、装盒;而比萨本身属于低层组件。    

       下面的指导方针,能帮助我们避免在OO设计中违反依赖倒置原则:

        1⃣️  变量不可以持有具体类的引用。如果使用new,就会持有具体类的引用。你可以改用工厂来避开这样的做法。

        2⃣️  不要让类派生自具体类。如果派生自具体类,就会依赖具体类。请派生自一个抽象(接口或抽象类)。

        3⃣️  不要覆盖基类中已实现的方法。如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中已实现的方法,应该由所有的子类共享。

        我们应该尽量达到这个原则,而不是随时都要遵循这个原则。我们都很清楚,任何Java成勋都有违反这些指导方针的地方。        

7、"最少知识" 原则

        定义:最少知识原则:只和你的密友谈话。

        原则初衷:希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中的一部分,会影响到其他部分。

        该原则提供了一些方针:

                就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:1⃣️  该对象本身 2⃣️  被当作方法的参数而传递进来的对象 3⃣️  此方法所创建或实例化的任何对象  4⃣️  对象的任          何组件

//未采用该原则  public float getTemp() {    Thermometer thermometer = station.getThermometer();    return thermometer.getTemperature();  }
//采用该原则  public float getTemp() {    return station.getTemperature();  }

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/whc20011/blog/691184

你可能感兴趣的文章
一个绘制虚线的非常规函数(常规方法,打印机上绘制不出虚线)
查看>>
获得本机的IP,掩码和网关
查看>>
大数据之 ZooKeeper原理及其在Hadoop和HBase中的应用
查看>>
Delphi中将XML文件数据装入DataSet
查看>>
你刚才在淘宝上买了一件东西
查看>>
发布一个 Linux 下的 C++ 多线程库
查看>>
Python序列类型
查看>>
再谈ThinkPHP
查看>>
Hibernate问题浅析
查看>>
出现访问apache资源直接下载php文件的解决办法-----yum 安装 php mysql
查看>>
七种Mysql表类型
查看>>
归并与归并排序
查看>>
linux和windows互传文件、用户配置文件和密码配置文件、用户组管理、用户管理...
查看>>
spark 应用程序性能优化经验
查看>>
基于Zabbix IPMI监控服务器硬件状况
查看>>
Go语言之并发资源竞争
查看>>
mac本显示隐藏文件或关闭显示隐藏文件
查看>>
spring4.0 整合 Quartz 实现任务调度(一)
查看>>
android复杂布局的一点思路
查看>>
Awesome Python
查看>>