# 七大原则是设计模式的依据 #


单一职责原则SRP

就一个类而言,应该仅有一个引起它变换的原因· ``

软件设计真正要做的许多内容,就是发现职责并把哪些职责相互分离

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏

接口隔离原则

客户端不应该依赖于它不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上。解决措施为:将接口拆分为几个独立的接口。

具体案例:先由b实现接口,再由a依赖接口
`package day6;

        import day3.LinkedList;

        public class test1 {
            /*这里用c d 来用接口的方法*/
            public static void main(String[] args) {
                C c = new C();
                c.depend2(new B());
            }

        }

        interface say1{
            public void sayEnglish();
        }
        interface say2{
            public void sayChinese();
            public void sayJapenese();
        }
        interface say3{
            public void sayFrench();
        }
        class B implements say1,say2{

            @Override
            public void sayEnglish() {
                System.out.println("wo shi yanglei");
            }

            @Override
            public void sayChinese() {
                System.out.println("我是杨磊");
            }

            @Override
            public void sayJapenese() {
                System.out.println("ri yu");
            }
        }/*让AB 实现接口*/
        class A implements say1,say3{

            @Override
            public void sayEnglish() {
                System.out.println("wo shi yang lei");
            }

            @Override
            public void sayFrench() {
                System.out.println( "jiliguala");
            }
        }
        class C{
            public void depend1(say1 say1){
                say1.sayEnglish();

            }
            public void depend2(say2 say2){
                say2.sayChinese();
                say2.sayJapenese();

            }
        }

`

依赖倒置原则

强内聚,松耦合

高层模块不应该依赖于低层模块。两个都应该依赖抽象。

抽象不应该依赖细节。细节应该依赖抽象

针对接口编程,不是对实现编程

不管是高层模块还是底层模块,他们都应该依赖于抽象,具体一点就是接口和抽象类,只要接口是稳定的,那么任何一个的更改都不需要其他受到影响,因为无论高低层模块都可以复用。

依赖传递的三种形式:接口传递 构造方法传递 setter方式传递
`
package day6;
/依赖倒置原则的讲解/

        /*最开始的代码没用接口,所以每次更改就会变动很大*/
        public class test2 {
            /*主程序区域为客户端不需要做很大的改变*/
            public static void main(String[] args) {
                Person person = new Person();
                person.receive(new Email());
                person.receive(new QQ());
            }
        }
        interface IReceiver{
            public String getInfo();
        }
        /*定义一个接口,写上获取方法*/

        /*具体是什么方法,就有具体的实现类取实现就可以了,客户端需要用哪一个就直接调用
        * */
        class Email implements IReceiver{

            @Override
            public String getInfo() {
                return "电子邮件信息:hello world";
            }
        }
        class QQ implements IReceiver{

            @Override
            public String getInfo() {
                return "qq信息:hello world";
            }
        }
        /*客户端使用者写上一个接受方法。方法参数为接口,输出接口的函数,这样就和实现类产生了
        * 依赖关系*/
        class Person{
            public void receive(IReceiver receiver){
                System.out.println(receiver.getInfo());
            }
        }

`

依赖倒转可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之,就是过程化的设计

里氏替换原则

子类型必须能够替换掉它们的父类型

只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的功能。

意思就是正确使用继承,尽量不要重写父类的方法,因为继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖来解决问题

创建一个更加基础的基类

开放-闭合原则

迪米特法则##

合成复用原则

全部评论

相关推荐

点赞 评论 收藏
分享
明天不下雨了:我靠2022了都去字节了还什么读研我教你****:你好,本人985电子科大在读研一,本科西南大学(211)我在字节跳动实习过。对您的岗位很感兴趣,希望获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务