2017年10月7日 星期六

開放封閉原則、單一職責原則

※開放封閉原則:

新增開放,修改封閉


public class People {
    public String function1(){
        return "功能1";
    }
    public String function2(){
        return "功能2";
    }
}
    
People p = new People();
System.out.println(p.function1());
System.out.println(p.function2());

※假設要新增功能3,就要修改了,這時就違返了開放封閉原則



public interface People {
    public String function();
}
    
public class Funtion1 implements People {
    @Override
    public String function() {
        return "功能1";
    }
}
    
public class Funtion2 implements People {
    @Override
    public String function() {
        return "功能2";
    }
}
    
People e1 = new Funtion1();
System.out.println(e1.function());
People e2 = new Funtion2();
System.out.println(e2.function());

※將 People 改成介面或抽象,以後都不會對 People 做修改
此時新功能只要新增子類,然後繼承 People




@FunctionalInterface
public interface People {
    public String function();
}
    
People e1 = () -> "功能1";
System.out.println(e1.function());
People e2 = () -> "功能2";
System.out.println(e2.function());

※如果父類  People 剛好只有一個功能要實作,還可以用 Java8,這時連子類都可以省略了



※單一職責原則

一個類別裡只要有一個功能就好,不要有太多的功能,假設類別裡有 3 個功能,那就拆成 3 個類別,所以使用時,只要針對要使用的功能去 new 就好了

沒有留言:

張貼留言