设计模式六大原则

来源:互联网 发布:网络用语1是什么意思 编辑:程序博客网 时间:2024/05/29 15:51

编程的技术要想更加精进,我们除了学习新的技术外,更加需要提高的是编程的思想!一个项目前期设计的好了,后期维护起来会更加的方便,轻松!所以在编写项目时候要做到六个字:低耦合,高内聚!设计模式在大学学习的时候好像专门有这门书,工作之后也偶尔翻翻,但是看过之后很快就忘的差不多了!所以打算趁着出差的空隙再进行一遍常用设计模式的总结学习!

先来设计模式的六大原则吧!

设计模式六大原则(一):单一职责原则

定义:不要存在多于一个导致类变更的原因。什么意思呢?通俗的说就是一个类只负责一项职责!

但是,在实际的开发中并不是所有的情况都合适!举个栗子吧!android开发中,我们会将功能相关的类抽取出来,生成一个工具类!在这个工具类中有各种各样的方法,担任不同的作用,比如获取系统的版本,制造厂商,App版本号等。从大的方面说,它遵循单一职责原则,这个类只负责提供系统信息方面的信息,但是从小的方面来说它并不符合单一职责的原则,它的个个方法提供不同的信息!

所以在实际开发中,考虑到开销的问题,我们并不一定非要严格的遵循它!可以灵活的变通!

说了这么多,我们总结一下它的优点:
1.对于个个类之间,我们可以降低它们之间的复杂度,一个类负责一项职责,其逻辑要比负责多个职责的逻辑简单的多;
2.提高类的可读性,对于后期的维护有利;
3.大大的降低了系统变更引起的风险;

设计模式六大原则(二):里氏替换原则

定义:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的程序P在所有对象o1都替换成o2的时候,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。什么意思呢?通俗的讲就是:子类可以扩展父类的功能,但是不能改变父类原有的功能!

还是懵懵懂懂吧!哈哈…举个栗子吧!

问题由来:有一功能P1,有A类完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P的功能是由原有功能P1与新功能P2组成。新功能是由A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。

解决方案:类B继承A时,除添加新的方法完成新功能P2外,尽量不要重写A类的方法,也尽量不要重载父类的这些方法。这就是里氏替换原则!

其实呢,里氏替换原则也是在阐述这样一条规则,就是说尽量不要重写或者重载父类的方法,虽然继承中没有明确的说明,但是如果子类对父类的实现方法任意修改,就会造成整个继承体系的破坏。当然,这也是面向对象继承特征的弊端,带来的是程序的侵入性,大大的降低了程序的可移植性!

设计模式六大原则(三):依赖倒置原则

定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖其抽象;

额,说的什么玩意?我们还是举个例子代码吧!

我们有一个Mother类:

class Mother{        public void readContent(Book book){            System.out.println(book.content());        }    }

有个Book类:

class Book {        public String content(){            return "读书!";        }    }

我们调用的代码片段:

 Mother mother=new Mother();        mother.readContent(new Book());

结果应该是:读书!

现在要改需求了,妈妈要读报纸:

 class NewsPapers {        public String content(){            return "报纸!";        }    }

怎么办?妈妈只会读书啊!

我们可以这样改:

class Mother{        public void readContent(IReader reader){            System.out.println(reader.content()+"");        }    }    class Book implements IReader{        public String content(){            return "我是一本书!";        }    }    class NewsPapers implements IReader{        public String content(){            return "报纸!";        }    }    interface IReader {        public String content();    }//调用的代码:    Mother mother=new Mother();    mother.readContent(new Book());    mother.readContent(new NewsPapers());

其实依赖倒置原则的核心原则就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。

设计模式六大原则(四):接口隔离原则

定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

终于来个比较简单的了,接口隔离也就是对接口的细化分割,降低依赖共同接口类的耦合度!

还是举个例子吧!

类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于A和B来说不是最小接口,则类B和D必须要去实现他们不需要的方法!IReader接口中有三个方法,name(),content(),author(),time(),Book类不需要time,NewsPapers类不需要author(),那我们在实现Book和NewsPapers的时候就出现多余的方法体,怎么解决呢?我们可以把IReader接口分成两个子接口,再对依赖的地方做出修改,这样就做到了分离的目的!

设计模式六大原则(五):迪米特法则

定义:一个对象应该对其它对象保持最少的了解。

类与类之间的关系越密切,耦合度越大,当一个类发生变化的时候,对另一个类的影响也越大!所以需要尽量降低类与类之间的耦合!

设计模式六大原则(六):开闭原则

定义:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。

即当软件的需求发生变化的时候,尽量同扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

OK,就写到这,有理解不对的地方,欢迎大家指正!

每天进步一点点,时间会让你成为巨人!加油!

参考书籍:

《android的设计模式》

原创粉丝点击