設計模式_01_單一原則
?
package designPatternOf_01; /*** 單一原則示例:動物呼吸* 引入的問題:魚不吸空氣,吸水*/ public class SinglePrinciple_01 {public static void main(String[] args) {Animal animal=new Animal();animal.breath("小貓");animal.breath("小兔");animal.breath("小狗");} } class Animal{public void breath(String animal){System.out.println(animal+"吸空氣!");} }
?
?
package designPatternOf_01; /*** 單一原則示例:動物呼吸* 1、問題:魚不吸空氣,吸水* 2、解決問題(遵循單一原則,復雜):水生動物Terrestre、陸生動物Aquatic* 3、復雜問題:要客戶端(main方法)需要修改,又要修改處理類需要修改*/ public class SinglePrinciple_02 {public static void main(String[] args) {Terrestre terrestre=new Terrestre();terrestre.breath("小貓:");terrestre.breath("小狗:");terrestre.breath("小兔:");Aquatic aquatic=new Aquatic();aquatic.breath("小魚");} }/*** 陸生動物*/ class Terrestre{public void breath(String animal){System.out.println(animal+"吸空氣!");} } /*** 水生動物*/ class Aquatic{public void breath(String animal){System.out.println(animal+"吸空氣!");} }
?
package designPatternOf_01; /*** 單一原則示例:動物呼吸* 1、引入的問題:魚不吸空氣,吸水* 2、解決問題:直接修改客戶端(SinglePrinciple_03類:main):(違背單一原則,代碼級別上違背,卻簡單)* 3、修改簡單,問題來了:如果有一天將魚分為淡水、海水魚,如果牛也吸水了...*/ public class SinglePrinciple_03 {public static void main(String[] args) {Animal03 animal03=new Animal03();animal03.breath("小貓:");animal03.breath("小狗:");animal03.breath("小兔:");animal03.breath("小魚");} }class Animal03{public void breath(String animal){if(animal.equals("小魚")){System.out.println(animal+"吸水!");}else {System.out.println(animal+"吸空氣!");}} }
?
package designPatternOf_01; /*** 單一原則示例:動物呼吸* 1、引入的問題:魚不吸空氣,吸水* 2、直接修改客戶端(SinglePrinciple_03類:main)* 3、解決問題(違背單一原則,方法級別上違背):如果有一天將魚分為淡水、海水魚,如果牛也吸水了...*/ public class SinglePrinciple_04 {public static void main(String[] args) {Animal04 animal04=new Animal04();animal04.breath_0("小貓:");animal04.breath_1("小狗:");animal04.breath_0("小兔:");animal04.breath_1("小魚:");} }class Animal04{public void breath_0(String animal){System.out.println(animal+"吸水!");}public void breath_1(String animal){System.out.println(animal+"吸空氣");} }
?
各有優點,取舍有度才能做到游刃有余
?