• Java开发设计六大基本原则


    一、单一职责

    1、定义
    • 不要存在多于一个导致类变更的原因
    2、理解
    • 一个类只负责一个职责
    3、举例
    • 手机:对于手机来说,其根本职责其实就是打电话,即有电话进来时会发出声响。但是,目前的智能手机综合了各种功能,短信、微信、甚至闹钟都会导致手机发生提示声响

    二、开闭原则

    1、定义
    * Software entities like classes,modules and functions should be open for extension but closed formodifications.
    	解释:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
    
    
    2、理解
    • 对扩展开发,对修改关闭
      • 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
    3、如何使用
    * 抽象约束
        1.通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;
        2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;
        3.抽象层尽量保持稳定,一旦确定即不允许修改。
        
    * 元数据(metadata)控制模块行为
    	何谓元数据?就是用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。
    	
    * 制定项目章程(团队约定)
    
    * 封装变化
    	1.将相同的变化封装到一个接口或抽象类中;
    	2.将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。
    	3.封装变化,也就是受保护的变化(protected variations),找出预计有变化或不稳定的点,我们为这些变化点创建稳定的接口,准确地讲是封装可能发生的变化,一旦预测到或“第六感”发觉有变化,就可以进行封装,23个设计模式都是从各个不同的角度对变化进行封装的
    
    

    三、里氏替换

    1、定义
    * If for each object o1 of type S there is an object o2 oftype T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 issubstituted for o2 then S is a subtype of T.
    	解释:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
    
    2、理解
    • 只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常
    3、好处
    * 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
    * 提高代码的重用性;
    * 子类可以形似父类,但又异于父类;
    * 提高代码的可扩展性,实现父类的方法就可以“为所欲为”了;
    * 提高产品或项目的开放性。
    

    四、依赖倒置

    1、定义
    * High level modules should not depend upon low level modules.Both should depend uponabstractions.Abstractions should not depend upon details.Details should depend upon abstractions.
    
    1. 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
    2. 抽象不应该依赖细节;
    3. 细节应该依赖抽象。
    
    
    2、Java中的体现
    • 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
    • 接口或抽象类不依赖于实现类;
    • 实现类依赖接口或抽象类。
    3、最佳写法
    • 构造函数传递依赖对象(构造函数注入),在类中通过构造函数声明依赖对象
    • Setter方法传递依赖对象(Setter依赖注入),在抽象中设置Setter方法声明依赖关系
    • 在接口的方法中声明依赖对象(接口注入)

    五、接口隔离

    1、定义
    * Clients should not be forced to depend upon interfaces that they don't use.
    	解释:客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,那就需要对接口进行细化,保证其纯洁性;
    
    2、理解
    • 接口中不存在对子类中无用的且必须实现的方法,如果有,需要对接口进行拆分
    3、概括
    • 建立单一接口,不要建立臃肿庞大的接口。再通俗一点讲:接口尽量细化,同时接口中的方法尽量少

    六、迪米特法则

    1、定义
    • 一个对象应该对其他对象有最少的了解
    2、理解
    • 降低类与类之间的耦合度
    3、概括
    • 通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的这么多public方法,我就调用这么多,其他的我一概不关心。
  • 相关阅读:
    POJ 3009
    POJ 3253
    POJ 3617
    POJ 3984
    UVA10012
    HDU5100
    HDU 5101
    UVA301 运输
    UVA 331 交换的方案数
    uva 10344 算23点
  • 原文地址:https://www.cnblogs.com/pretttyboy/p/13455593.html
Copyright © 2020-2023  润新知