设计模式学习---常用的设计原则

  • 开闭原则(Open Close Principle)
    对扩展开发,对修改关闭,使程序的扩展性更好,更加易于维护和升级。
    开闭原则意味着当有新的需求或者变化时,可以对现有的代码进行灵活的扩展。对代码进行封装是实现开闭原则的重要手段,对于经常发生变化的状态,将其封装成一个抽象类,当然 要拒绝对抽象的滥用!
  • 里氏代换原则(Dependence Inversion Principe)
    任何基类出现的地方,子类一定可以出现,多使用多态的方式,屏蔽不同子类对象之间的差异性,写出通用的代码,做出通用的编程,以适应需求的不断变化。
    历史转换原则是实现开闭原则的重要方式之一,因为在软件中将一个基类对象替换成它的子类对象,程序并不会产生任何错误和异常(反过来不成立),也就是说使用基类对象的地方都可以使用子类对象,因此在程序中可以尽量使用积累类型来对对象进行定义,而在运行时在确定子类类型,用子类对象来替换父类对象。
    这里需要注意的是,子类必须实现父类中声明的所有方法,尽可能吧父类设计为抽象类或接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现(多态)。
  • 依赖倒转原则(Interface Segregation Principe)
    进来多依赖于抽象类或接口,而不是具体实现类,因为抽象类对子类有强制性和规范性。
    具体依赖抽象,上层依赖下层。采用依赖倒转原则可以减少类之间的耦合性,提高系统的稳定性,减少并行开发引起的风险,提高代码的可读性和可维护性。
  • 接口隔离原则(Interface Segregation Principe)
    尽量多使用小接口,而不是大接口,避免接口的污染,减低类之间的耦合
    接口中暴露的行为让实现类知道的越少越好,可以将一个大的总接口,划分为几个小的单一的接口,对接口进行细化,接口中的方法越少越好。为每个类简历专用的接口,而不是建立一个大的接口供所有的类去依赖。
    接口是设计时对外部设定的约定,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
    (Java中接口可以多实现)
  • 迪米特法则(最少知道原则)(Demeter Principe)
    一个实体(模块)应当尽量少与其他实体(模块)之间发生相互作用,是系统功能模块相互独立,高内聚低耦合。
    耦合主要描述模块之间的关系, 内聚主要描述模块内部
    内聚:模块内部的元素, 关联性越强, 则内聚越高, 模块单一性更强。 一个模块应当尽可能独立完成某个功能。(程序员就应该好好写代码,完成自己的工作)
    耦合:模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差。(程序员完成自身的职责就可以了,如果时不时让一个程序员去干销售的活,那两者都弄不好。)
    类与类之间的关系越是密切,耦合度也就越大,所以一个对象对另一个对象知道的越少越好,在一个类中,要尽可能少的使用其他类。减少与其他类的关联。
  • 合成复用原则(Composite Reuse Principe)
    尽量多使用合成/聚合的方式,而不是继承的方式。
    比如说这里有个类A,包含一个show方法,新建一个类B,类B想要调用类A中的show方法,应该怎么做呢?
    类A
    首先是继承,类B继承了类A后,可直接调用show方法,但是这不符合合成复用原则。(Java只支持单继承,如果为了一个show方法继承了类A,那么如果类B本身就有父类,那就无法实现继承了,所以不推荐)
    继承的方式
    合成复用原则(合成/聚合的方式),将需要的方法的类, 声明一个该类型的成员变量,通过构造方法来进行初始化,然后在进行调用
    合成/聚合的方式

本文章只是个人学习,内容不多,也都很基础,如果内容上有什么问题,还请大家多多指教!!

一定会有那么一天,我也能用上这句话:“本性闲散,最终却也跟上了前辈的步伐”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值