1. 程式人生 > >西遊記之設計模式原則——單一職責原則

西遊記之設計模式原則——單一職責原則

void 可能 equals main person 方法 隱患 客戶端代碼 p s

單一職責原則

——專心致誌只做一件事

技術分享圖片
 1 package danyizhize;
 2 
 3 class SunWuKong {
 4     public void XiangMo(String name) {
 5         System.out.println(name + "降魔!");
 6     }
 7 
 8     public void XingLi(String name) {
 9         System.out.println(name + "拿行李!");
10     }
11 
12     public void QianMa(String name) {
13 System.out.println(name + "牽白龍馬!"); 14 } 15 16 public void QiMa(String name) { 17 System.out.println(name + "騎馬!"); 18 } 19 } 20 21 public class DanYiZhiZe { 22 23 public static void main(String[] args) { 24 // TODO Auto-generated method stub 25 SunWuKong sunWuKong = new
SunWuKong(); 26 sunWuKong.XiangMo("孫悟空"); 27 sunWuKong.QianMa("孫悟空"); 28 sunWuKong.XingLi("孫悟空"); 29 sunWuKong.QiMa("孫悟空"); 30 } 31 }
View Code

運行結果:

孫悟空降魔!
孫悟空牽白龍馬!
孫悟空拿行李!
孫悟空騎馬!

孫悟空的任務太多,忙不過來!!!

技術分享圖片
 1 package danyizhize;
 2 
 3 class SunWuKong {
 4     public
void XiangMo(String name) { 5 System.out.println(name + "降魔!"); 6 } 7 } 8 9 class ZhuBaJie { 10 public void QianMa(String name) { 11 System.out.println(name + "牽白龍馬!"); 12 } 13 } 14 15 class ShaHeShang { 16 public void XingLi(String name) { 17 System.out.println(name + "拿行李!"); 18 } 19 } 20 21 class TangSeng { 22 public void QiMa(String name) { 23 System.out.println(name + "騎馬!"); 24 } 25 } 26 27 public class DanYiZhiZe { 28 29 public static void main(String[] args) { 30 // TODO Auto-generated method stub 31 SunWuKong sunWuKong = new SunWuKong(); 32 ZhuBaJie zhuBaJie = new ZhuBaJie(); 33 ShaHeShang shaHeShang = new ShaHeShang(); 34 TangSeng tangSeng = new TangSeng(); 35 36 sunWuKong.XiangMo("孫悟空"); 37 zhuBaJie.QianMa("豬八戒"); 38 shaHeShang.XingLi("沙和尚"); 39 tangSeng.QiMa("唐僧"); 40 } 41 }
View Code

運行結果:

孫悟空降魔!
豬八戒牽白龍馬!
沙和尚拿行李!
唐僧騎馬!

改動大,將原有的1個類變成了4個類,還需要修改客戶端代碼!!!

技術分享圖片
 1 package danyizhize;
 2 
 3 class Person {
 4     public void Work(String name) {
 5         if ("孫悟空".equals(name)) {
 6             System.out.println(name + "降魔!");
 7         } else if ("豬八戒".equals(name)) {
 8             System.out.println(name + "牽白龍馬!");
 9         } else if ("沙和尚".equals(name)) {
10             System.out.println(name + "拿行李!");
11         } else if ("唐僧".equals(name)) {
12             System.out.println(name + "騎馬!");
13         }
14     }
15 }
16 
17 public class DanYiZhiZe {
18 
19     public static void main(String[] args) {
20         // TODO Auto-generated method stub
21         Person person = new Person();
22 
23         person.Work("孫悟空");
24         person.Work("豬八戒");
25         person.Work("沙和尚");
26         person.Work("唐僧");
27     }
28 }
View Code

運行結果:

孫悟空降魔!
豬八戒牽白龍馬!
沙和尚拿行李!
唐僧騎馬!

如果再增加其他人,很有可能變成孫悟空做飯,操作簡單,卻存在隱患!!!

技術分享圖片
 1 package danyizhize;
 2 
 3 class Person {
 4     public void XiangMo(String name) {
 5         System.out.println(name + "降魔!");
 6     }
 7 
 8     public void XingLi(String name) {
 9         System.out.println(name + "拿行李!");
10     }
11 
12     public void QianMa(String name) {
13         System.out.println(name + "牽白龍馬!");
14     }
15 
16     public void QiMa(String name) {
17         System.out.println(name + "騎馬!");
18     }
19 }
20 
21 public class DanYiZhiZe {
22 
23     public static void main(String[] args) {
24         // TODO Auto-generated method stub
25         Person person = new Person();
26         person.XiangMo("孫悟空");
27         person.QianMa("豬八戒");
28         person.XingLi("沙和尚");
29         person.QiMa("唐僧");
30     }
31 }
View Code

孫悟空降魔!
豬八戒牽白龍馬!
沙和尚拿行李!
唐僧騎馬!

需要足夠簡單的邏輯,才可以在代碼上違反單一職責原則;

需要類中方法數量足夠少,才可以在方法級別上違反單一職責原則。

西遊記之設計模式原則——單一職責原則