设计模式学习(一)——六大原则

1.单一职责原则

  • 有且仅有一个原因引起类的变更。

    合理的职责分解,相同的职责放到一起,不同的职责分解到不同的接口和实现中去,这个是最容易也是最难运用的原则,关键还是要从业务出发,从需求出发,识别出同一种类型的职责

    单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责。

    比如说一个权限类,就只负责权限内的事情,不要去干涉登录或者角色相关的类,也不要把权限的事情放到其他类里面。否则,相关的代码分散在系统的各个地方,要维护的代码量过大,随着系统的扩张,维护的代码也会成几何增长。
    总结:控制粒度大小,将对象解耦,提高内聚性。

2.开闭原则

  • 模块、类和函数应该对扩展开放,对修改关闭。

    针对提供方,对扩展开放,针对调用方,对修改关闭。

    开闭原则是编程中最基础,最重要的设计原则,只要是面向对象编程,在开发时都会强调开闭原则

    开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的 工具和方法,而开闭原则才是其精神领袖。依照java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类

    一个软件实体的任何变更,不应该是建立在修改的基础上,而是应该对软件实体进行扩展来达到变更的目的。

    总结:对扩展开放,对修改关闭。

3.里氏替换原则

  • 派生类必须完全可替代其基类。

    里氏替换原则告诉我们,在软件中将一个基类对象替换成子类对象,程序将不会产生任何错误和异常。但是反过来就不行了,有子类出现的地方父类就未必能适应。

    里氏替换原则是实现开闭原则的重要方式之一。

    在运用里氏替换原则时,尽量把父类设计成抽象类或者接口,让子类继承父类或实现父接口,并实现父类声明的方法。运行时,子类实例替换父类实例。

4.接口隔离原则

  • 客户端不应该依赖于它不需要的接口

    如果接口隔离原则被破坏,客户端被迫依赖了它不需要的接口,代码就会变得紧密耦合,几乎不可能添加新功能。

    这要求我们将接口细化,尽量减少接口中的方法。
    总结:要为各个类建立他们需要专门的接口。

5.依赖倒置原则

  • 高级模块不应该依赖于低级模块,两者应该依赖于抽象。

  • 抽象不应该依赖与细节,细节应该依赖于抽象。

    举个例子:

    public class Java {
        public void say() {
            System.out.println("我用Java编程");
        }
    }
    
    public class Programmer {
        public void programming(Java java) {
            java.say();
        }
    }
    

    此时,我可以用Java语言编程,但如果我通过学习,掌握了Python,那我该如何扩展类?

    显然是很困难的。但是,如果我们遵从依赖倒置原则,将两者依赖于一个抽象,就会大大提高我们代码的扩展性。

    public interface Language {
        public void say();
    }
    
    public class Java implements Language {
        @Override
        public void say() {
            System.out.println("我用Java编程");
        }
    }
    
    public class Python implements Language {
        @Override
        public void say() {
            System.out.println("我用Python编程");
        }
    }
    
    public class Programmer {
        public void programming(Language language) {
            language.say();
        }
    }
    

    总结:面向接口编程。

6.迪米特法则

  • 一个对象应该对其他对象尽可能少的了解,不和陌生人说话。

    又称最少知识原则。迪米特原则要求我们在设计系统的时候,要尽量减少两个对象之间的交互,如果两个对象之间不需要彼此之间的通信,那么两个对象就不应该发生任何的直接相互作用。

    如果需要调用一个对象的某一个方法,则可以通过第三者转发这个调用。简言之,添加一个第三者,减低现有对象的耦合度。

    书籍
    《Java设计模式及实践》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值