设计模式_01_单一原则
设计模式_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+"吸空气"); } }
各有优点,取舍有度才能做到游刃有余