初涉Android设计原则,设计模式

本文详细阐述了面向对象设计中的六大基本原则:单一职责原则、里氏代换原则、开放-封闭原则、依赖倒转原则、合成/聚合复用原则及迪米特法则,并通过实例解释了如何在实际编程中应用这些原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序中所有的依赖关系都终止于抽象类或者接口,  才是真正的面向对象设计

设计原则一 :    单一职责原则

定义: 对于一个类,应该只有一个引起它变化的原因.

优点: 降低类的复杂度,提高类的可读性,提高系统的可维护性.

例子: 

//超人类
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 + "在水中呼吸");
    }
    
}

可以违反单一职责原则的条件:    需要足够简单的逻辑,才可以在   代码级别上     违反单一职责原则.

                                                需要类中的方法数量足够少,才可以在   方法级别上   违反单一职责原则.

设计原则二 : 里氏代换原则 (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. 子类具有继承父类的责任,而不是重写父类的方法时,使用继承

设计原则六 : 迪米特法则(最少知识原则)

定义: 如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用. 如果其中一个类需要调用另一个类的某个方法,可以通过第三方来转发这个调用.


转载于:https://my.oschina.net/u/942298/blog/371738

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值