java设计模式

gitee地址: https://gitee.com/zhumiao9527/java_design_patterns

参考文章地址: http://www.uml.org.cn/sjms/201211023.asp#1

设计模式的7大原则

1开闭原则

定义:一个软件实体如类,模块,方法应该对扩展开放,对修改关闭

2依赖倒置原则

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

 1 场景是这样的,母亲给孩子讲故事,只要给她一本书,她就可以照着书给孩子讲故事了。代码如下:
 2 class Book{
 3     public String getContent(){
 4         return "很久很久以前有一个阿拉伯的故事……";
 5     }
 6 }
 7 
 8 class Mother{
 9     public void narrate(Book book){
10         System.out.println("妈妈开始讲故事");
11         System.out.println(book.getContent());
12     }
13 }
14 
15 public class Client{
16     public static void main(String[] args){
17         Mother mother = new Mother();
18         mother.narrate(new Book());
19     }
20 } 
21 运行结果:
22 妈妈开始讲故事
23 很久很久以前有一个阿拉伯的故事……
24 运行良好,假如有一天,需求变成这样:不是给书而是给一份报纸,让这位母亲讲一下报纸上的故事,报纸的代码如下:
25 class Newspaper{
26     public String getContent(){
27         return "林书豪38+7领导尼克斯击败湖人……";
28     }
29 } 
30 这位母亲却办不到,因为她居然不会读报纸上的故事,这太荒唐了,只是将书换成报纸,居然必须要修改Mother才能读。假如以后需求换成杂志呢?换成网页呢?还要不断地修改Mother,这显然不是好的设计。原因就是Mother与Book之间的耦合性太高了,必须降低他们之间的耦合度才行。
31 我们引入一个抽象的接口IReader。读物,只要是带字的都属于读物:
32 interface IReader{
33     public String getContent();
34 } 
35 
36 class Newspaper implements IReader {
37     public String getContent(){
38         return "林书豪17+9助尼克斯击败老鹰……";
39     }
40 }
41 class Book implements IReader{
42     public String getContent(){
43         return "很久很久以前有一个阿拉伯的故事……";
44     }
45 }
46 
47 class Mother{
48     public void narrate(IReader reader){
49         System.out.println("妈妈开始讲故事");
50         System.out.println(reader.getContent());
51     }
52 }
53 
54 public class Client{
55     public static void main(String[] args){
56         Mother mother = new Mother();
57         mother.narrate(new Book());
58         mother.narrate(new Newspaper());
59     }
60 }
61 运行结果:
62 妈妈开始讲故事
63 很久很久以前有一个阿拉伯的故事……
64 妈妈开始讲故事
65 林书豪17+9助尼克斯击败老鹰……
依赖倒置原则解释代码

3单一职责原则

定义: 一个类负责一个指责,不要存在多与一个倒置类变更的原因。实际应用可能会很复杂,可能只能做到方法的单一职责。总之尽量遵守比较好。

4接口隔离原则

定义: 客户端不应该依赖它不需要的接口,一个类对于另一个类的依赖应该建立在最小的接口上。比如接口里面有两个方法,那么实现类也必须实现两个方法,但是依赖这个实现类的客户端,只是需要一个这样的方法,所以造成了浪费,最好将接口拆分,这样就做到了接口隔离。

5迪米特法则

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

6里氏替换原则

7合成复用原则

 

posted @ 2018-08-13 19:42  玲珑塔  阅读(231)  评论(0编辑  收藏  举报