初涉Android設計原則,設計模式

程序中全部的依賴關係都終止於抽象類或者接口,  纔是真正的面向對象設計java

設計原則一 :    單一職責原則編程

定義: 對於一個類,應該只有一個引發它變化的緣由.ide

優勢: 下降類的複雜度,提升類的可讀性,提升系統的可維護性.函數

例子: spa

//超人類
public class SuperMan {
    
    public void 維護世界和平(){
        //超人維護世界和平
    }
    
}

擴展:
public class Animal {
    
    public void breathe(String animal){
        System.out.println(animal + "在空氣中呼吸");
    }
    public void breathe2(String animal){
        System.out.println(animal + "在水中呼吸");
    }
    
}

能夠違反單一職責原則的條件:    須要足夠簡單的邏輯,才能夠在   代碼級別上     違反單一職責原則.設計

                                                須要類中的方法數量足夠少,才能夠在   方法級別上   違反單一職責原則.code

設計原則二 : 里氏代換原則 (Liskov Substitution Principle, LSP)
對象

定義:  子類型必須可以替換掉它們的父類型.
繼承

         該原則反映了父類和子類的關係,是面向對象設計中最重要也是最基本的原則之一.接口

優勢:使的代碼複用變得簡單

//老木匠類
public class OldCarpenter {
    
    public void makeFurniture(){
        System.out.println("作出一把椅子!");
    }
}
//老木匠徒弟類
    public class YoungFurniture() extends OldCarpenter{
        //覆蓋父類方法
        @Override
        public void makeFurniture(){
            super.makeFurniture();
            System.out.println("裝飾了一下椅子!");
        }
    }

設計原則三 :  開放-封閉原則(Open Closed Principle,  OCP)

定義: 程序的實體對象(模塊,類,函數等)應該能夠進行擴展,但不該該能夠修改

特徵: 對於擴展是開放的, 對於修改是封閉的

意義: 開放-封閉原則的核心思想就是面向抽象編程

//動物類
public class Animal {
    
    //動物會呼吸
    public void breath(){
        System.out.println("呼吸");
    }
}

//貓類從動物類繼承
public class Cat extends Animal {
    public void catchMouse(){
        System.out.println("貓抓老鼠");
    }
}
//咪咪類
public class Mimi extends Cat{
    public void Swimming(){
        System.out.println("咪咪在游泳");
    }
}

設計原則四 : 依賴倒轉原則

定義: 程序的高層模塊不該該依賴於低層模塊,但二者都應依賴於抽象 ; 抽象不該該依賴於具體細節,而細節應該依賴於抽象.

面向對象應該針對接口編程,而不是針對現實編程.

使用該原則的規範:  1.  每一個類儘可能都繼承自接口或抽象類 , 或者 抽象類和接口二者都具有.

                             2. 變量的顯示類型儘可能是接口或者是抽象類

                             3. 儘可能避免從具體類派生

                             4. 儘可能不要覆蓋基類的方法 , 由於類間依賴的是抽象,覆蓋了抽象的方法,對依賴的穩定性會產生必定

                                的影響

//工做者接口
interface IWorker {
    public void work();
}


public class Worker implements IWorker{

    @Override
    public void work() {
        // TODO Auto-generated method stub
        
    }
}
//新增工做者
public class SeniorWorker implements IWorker{

    @Override
    public void work() {
        // TODO Auto-generated method stub
        
    }
}
//管理類
public class Manager {
    IWorker m_worker;
    public void setWorker (IWorker w){
        m_worker = w;
    }
    
    public void manager(){
        m_worker.work();
    }
}

設計原則五 : 合成/聚合複用原則

定義:  儘可能不使用類繼承, 而儘可能使用合成/聚合

聚合是一種比較"弱"的擁有關係,具體表現是 ;  甲對象中能夠包括乙對象,但乙對象不是甲對象的一部分

合成是一種比較"強"的擁有關係,具體表現是 :  嚴格的總體與部分之間的關係,且總體與部分有相同的生命週期

怎樣選擇使用繼承仍是 合成/聚合方法?

1. 子類是父類的一個特殊種類,而不是父類的一個角色時,使用繼承.即區分是"Is-A"和"Has-A". "Is-A"用繼承,"Has-A"用合

    成/聚合

2.  永遠不會出現須要將子類換成另一個類的子類時,使用繼承.

3. 子類具備繼承父類的責任,而不是重寫父類的方法時,使用繼承

設計原則六 : 迪米特法則(最少知識原則)

定義: 若是兩個類之間沒必要直接通訊,則這兩個類不該該發生直接的相互做用. 若是其中一個類須要調用另外一個類的某個方法,能夠經過第三方來轉發這個調用.

相關文章
相關標籤/搜索