Android实例代码理解设计模式SOLID六大原则

目录
  • 单一职责原则
    • 定义
    • 代码解释
      • 未遵守单一原则
      • 遵守单一原则
  • 开闭原则
    • 定义
    • 代码解释
  • 里氏替换原则
    • 定义
    • 代码解释
  • 依赖倒置原则
    • 定义
    • 代码解释
      • 未遵守依赖导致原则
      • 遵守依赖导致原则
  • 接口隔离原则
    • 定义
    • 代码解释
      • 未遵守接口隔离原则
      • 遵守接口隔离原则
  • 迪米特原则
    • 定义
    • 代码解释

单一职责原则

定义

定义:

确保单例类只有一个实例,并且这个单例类提供一个函数接口让其他类获取到这个唯一的实例。

解释:一个类只负责一个职责,不要存在多于一个导致类变更的原因。

代码解释

比如一个类记录一些食品的名称,但同时又记录食品的做法。前者属于业务对象,后者属于业务逻辑,根据单一职责原则,我们需要将业务和数据分开

未遵守单一原则

public class Foods {
    private String fish;
    private String meat;

    public String getFish() {
        return fish;
    }

    public void setFish(String fish) {
        this.fish = fish;
    }

    public String getMeat() {
        return meat;
    }

    public void setMeat(String meat) {
        this.meat = meat;
    }
    public void RedCookedFish(){
        //do something...
    }
    public void RedCookedMeat(){
        //do something...
    }
}

遵守单一原则

public class Foods {
    private String fish;
    private String meat;

    public String getFish() {
        return fish;
    }

    public void setFish(String fish) {
        this.fish = fish;
    }

    public String getMeat() {
        return meat;
    }

    public void setMeat(String meat) {
        this.meat = meat;
    }
}
public class Practices {
    public void RedCookedFish(){
    //do something...
    }
    public void RedCookedMeat(){
    //do something...
    }
}

开闭原则

定义

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

当一个系统有了新的需要,我们并不想在原来的功能类去修改,导致破坏原来的逻辑,以至于出现新的BUG,所有我们在设计系统时尽量通过扩展的方式实现新的功能,简单的就是说让我们好好利用继承和接口。

代码解释

比如有一个动物,有姓名和运动方式两种属性,当它成年时,需要结交异性,又需要增加繁衍后代的功能,我们通过继承或者接口的方式进行扩展新功能,遵守开闭原则。

public class Animal {
    private String mName;
    private String mMovementMode;
    public Animal(String mName,String mMovementMode){
        this.mName = mName;
        this.mMovementMode = mMovementMode;
    }

    public String getmName() {
        return mName;
    }

    public String getmMovementMode() {
        return mMovementMode;
    }
}
public class Multiply extends Animal {
    public Multiply(String mName, String mMovementMode) {
        super( mName, mMovementMode );
    }
    public void MultiplyMethod(){
    //do something...
    }
}

里氏替换原则

定义

定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序
P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类
型。

定义2:所有引用基类的地方必须能透明地使用其子类的对象

解释:打比方抽象类的抽象方法,子类必须实现

代码解释

比如一个动物类有一个运动方式的属性,其余具体动物,比如:鱼,鹰等需要继承其方法,实现自己的运动方式。

public abstract class Animal {
    public abstract void MultiplyMethod(String Multiply);
}
public class Fish extends Animal {
    @Override
    public void MultiplyMethod(String Multiply) {
        // set Multiply Method
    }
}

依赖倒置原则

定义

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

依赖倒置原则的核心思想是面向接口编程。

代码解释

比如现阶段热门的编程语言,java,c,python等,但随着时间的推移,随着科技的发展,会根据需求不同,产生新的语言。如果我们需要在一个类中一个个添加,那样太麻烦,使用接口进行配置,则会简单很多。

未遵守依赖导致原则

class C{
    public String get(){
        return "C";
    }
}
class Java{
    public String get(){
        return "Java";
    }
}
class Python{
    public String get(){
        return "Python";
    }
}
class GetLanguage{
    public GetLanguage(){

    }
    public void getLanguage(C c){
        Log.d( "Language",c.get() );
    }
    public void getLanguage(Java java){
        Log.d( "Language",java.get() );
    }
}
 GetLanguage language = new GetLanguage();
        language.getLanguage( new C() );
        language.getLanguage( new Java() );

遵守依赖导致原则

定义接口

public interface ILanguage {
    String get();
}
public class Language {
   public void getLanguage(ILanguage iLanguage){
       Log.d( "Language",iLanguage.get() );
   }
}
 Language language = new Language();
        language.getLanguage( new ILanguage() {
            @Override
            public String get() {
                return "C";
            }
        } );

接口隔离原则

定义

定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

简单来说,一个类只需要实现自己需要的方法,不相干的方法不需要实现

代码解释

比如一个接口实现动物所有的运动方式,比如:跑、爬、游、飞、跳。老鹰就只需要实现飞,狗就只需要实现跑,但是实现这个接口的话,必须实现所有方法,就会很臃肿,并且有的方法不需要实现。我们只需要将他们拆分成四个接口,不同的动物,实现不同的运动方式即可。

未遵守接口隔离原则

public interface IAnimal {
    void run();
    void swim();
    void climb();
    void fly();
}
class Dog implements IAnimal{

    @Override
    public void run() {

    }

    @Override
    public void swim() {

    }

    @Override
    public void climb() {

    }

    @Override
    public void fly() {

    }
}

遵守接口隔离原则

public interface  Swim{
        void swim();
    }
    public interface  Run{
        void run();
    }
    public interface  Climb{
        void climb();
    }
    public interface  Fly{
        void fly();
    }
class Dog implements Run{

        @Override
        public void run() {

        }
    }

迪米特原则

定义

定义:一个对象应该对其他对象保持最少的了解。

代码解释

假如一个类实现了加减乘除四个方法,同时在加减乘除方法内实现了对进行运算的数值进行类型判断。类型判断中又实现了范围判断。我们只需要将加减乘除四个方法暴露即可,其余方法不需要暴露。

public class Operation {
    public Object Add(Object num1,Object num2){
       Object flag = JudgeType(num1,num2);
       int num = (Integer) flag;
       switch (num){
           case 0:
               return (Integer)num1 + (Integer)num2;
           case 1:
               return (Double)num1 + (Double) num2;
            default:
                return null;
       }
    }
    private void Sub(Object num1,Object num2){

    }
    private void Ride(Object num1,Object num2){

    }
    private void Division(Object num1,Object num2){

    }
    private Object JudgeType(Object num1,Object num2){
        if (num1 instanceof Integer){
          return 0;
        }else if (num1 instanceof Double){
            return 1;
        }
        return 3;
    }
//    private boolean JudgeIntRange(int num){
//        if (num < 65535 && num > -65535){
//            intFlag = true;
//            return true;
//        }
//        intFlag = false;
//        return false;
//    }
}
Operation operation = new Operation();
Log.d( "Result=",operation.Add( 1,1 )+"" );

2021-10-27 21:27:32.893 25595-25595/com.franzliszt.solid D/Result=: 2

到此这篇关于Android实例代码理解设计模式SOLID六大原则的文章就介绍到这了,更多相关Android 设计模式SOLID六大原则内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android编程设计模式之解释器模式详解

    本文实例讲述了Android编程设计模式之解释器模式.分享给大家供大家参考,具体如下: 一.介绍 解释器模式(Interpreter Pattern)是一种用的比较少的行为型模式,其提供了一种解释语言的语法或表达式的方式,该模式定义了一个表达式接口,通过该接口解释一个特定的上下文.在这么多的设计模式中,解释器模式在实际运用上相对来说要少很多,因为我们很少会自己去构造一个语言的文法.虽然如此,既然它能够在设计模式中有一席之位,那么必定有它的可用之处. 二.定义 给定一个语言,定义它的文法的一种表示

  • Android编程设计模式之中介者模式详解

    本文实例讲述了Android编程设计模式之中介者模式.分享给大家供大家参考,具体如下: 一.介绍 中介者模式(Mediator Pattern)也称为调解者模式或调停者模式,Mediator本身就有调停者和调解者的意思. 在日常生活中调停者或调解者这个角色我们见得比较多的是"和事老",也就是说调解两个有争端的人的角色,举个不恰当的例子,比如爸妈吵架,孩子或者双方父母则会出面劝架或阻止争吵,这里孩子或双方父母则是充当的是调解者的模式. 而对于中介呢?大家平时听得最多的莫过于房产中介了,在

  • Android编程设计模式之命令模式详解

    本文实例讲述了Android编程设计模式之命令模式.分享给大家供大家参考,具体如下: 一.介绍 命令模式(Command Pattern),是行为型设计模式之一.命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很"规范"的模式,不过,就是基于这一点,命令模式相对于其他的设计模式更为灵活多变.我们接触比较多的命令模式个例无非就是程序菜单命令,如在操作系统中,我们点击"关机"命令,系统就会执行一系列的操作,如先是暂停处理事件,保存系统的一些配置,然

  • Android编程设计模式之访问者模式详解

    本文实例讲述了Android编程设计模式之访问者模式.分享给大家供大家参考,具体如下: 一.介绍 访问者模式是一种将数据操作与数据结构分离的设计模式,它是<设计模式>中23种设计模式中最复杂的一个,但它的使用频率并不高,正如<设计模式>的作者GOF对访问者模式的描述:大多数情况下,你不需要使用访问者模式,但是当你一旦需要使用它时,那你就是真的需要它了. 访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的.比较稳定的对象结构,这些对象的类都拥有一个accept方法用来接受访问

  • Android编程设计模式之备忘录模式详解

    本文实例讲述了Android编程设计模式之备忘录模式.分享给大家供大家参考,具体如下: 一.介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时说的"后悔药".备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露. 二.定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态. 三.使用

  • Android编程设计模式之模板方法模式详解

    本文实例讲述了Android编程设计模式之模板方法模式.分享给大家供大家参考,具体如下: 一.介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变的,例如,执行程序的流程大致如下: 1.检查代码的正确性: 2.链接相关的类库: 3.编译相关代码: 4.执行程序. 对于不同的程序设计语言,上述4个步骤都是不一样的,但是,它们的执行流程是固定的,这类问题的解决方

  • Android编程设计模式之迭代器模式详解

    本文实例讲述了Android编程设计模式之迭代器模式.分享给大家供大家参考,具体如下: 一.介绍 迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一.迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List.Map.数组等,我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法.如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅要维护自身内部的数据元

  • Android实例代码理解设计模式SOLID六大原则

    目录 单一职责原则 定义 代码解释 未遵守单一原则 遵守单一原则 开闭原则 定义 代码解释 里氏替换原则 定义 代码解释 依赖倒置原则 定义 代码解释 未遵守依赖导致原则 遵守依赖导致原则 接口隔离原则 定义 代码解释 未遵守接口隔离原则 遵守接口隔离原则 迪米特原则 定义 代码解释 单一职责原则 定义 定义: 确保单例类只有一个实例,并且这个单例类提供一个函数接口让其他类获取到这个唯一的实例. 解释:一个类只负责一个职责,不要存在多于一个导致类变更的原因. 代码解释 比如一个类记录一些食品的名

  • JAVA初探设计模式的六大原则

    前言 我想用贴近生活的语句描述一下自己对六种原则的理解.也就是不做专业性的阐述,而是描述一种自己学习后的理解和感受,因为能力一般而且水平有限,也许举的例子不尽妥当,还请谅解原本我是想用JavaScript编写的,但是JavaScript到现在还没有提出接口的概念,而用TypeScript写又感觉普及度还不算特别高,所以还是决定用Java语言编写 首先要提的是:六大原则的灵魂是面向接口,以及如何合理地运用接口 P1.单一职责原则(Single Responsibility Principle) 应

  • 详解java设计模式之六大原则

    一.单一职责原则 1.单一职责定义 单一职责原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因. 单一职责原则告诉我们:一个类不能太"累"!在软件系统中,一个类承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责 变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封

  • Java之map的常见用法讲解与五种循环遍历实例代码理解

    目录 一.概述: 二.Map集合的功能介绍 三.map官方总结 四.实例 五.循环遍历的五种方法 一.概述: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 二.Map集合的功能介绍 a:添加功能 V put(K key,V val

  • Android 实例代码带你掌握FrameLayout

    目录 概述 练习一 练习二 概述 FrameLayout以层叠的方式布局组件:每次只能显示其中的一个.与扑克牌类似,当叠加在一起时只能看到最上面的那张.FrameLayout为布局在其中的组件提供了一个XML配置属性:Android:layout_gravity.通过这个属性,布局在FrameLayout中的组件可以指定自己在容器中的重心位置,例如,靠左,靠右等, 所有控件都默认显示在屏幕左上角. FrameLayout全局定义的属性 练习一 实现下面布局 代码: <?xml version=&qu

  • Dcloud的native.js直接拨打电话Android实例代码

    利用Dcloud的native.js直接拨打电话实例代码Android版,由于iOS系统的限制所以只有Android版实例 下面3种方式都可以实例,大家可以测试下总有一款适合你 function call(){ // 导入Activity.Intent类 var Intent = plus.android.importClass("android.content.Intent"); var Uri = plus.android.importClass("android.net

  • 解析Java实现设计模式六大原则之里氏替换原则

    一.什么是里氏替换原则 1.1.里氏替换原则定义 里氏替换原则(Liskov Substitution principle)是对子类型的特别定义的. 为什么叫里氏替换原则呢?因为这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 里氏替换原则有两层定义: 定义1 If S is a subtype of T, then objects of type T may be replaced with objects of type S, withou

  • 实例讲解Java设计模式编程中的OCP开闭原则

    定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化.          开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统.开闭原则可能是设计模式六项原则中定义最模糊的一个了,它

  • Android程序开发之Fragment实现底部导航栏实例代码

    流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment

  • Android 百度地图POI搜索功能实例代码

    在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这三个字母,决定认认真真的搜索一些POI具体的含义. POI是英文的缩写,原来的单词是point of interest, 直译成中文就是兴趣点的意思.兴趣点这个词最早来自于导航地图厂商.地图厂商为了提供尽可能多的位置信息,花费了很大的精力去寻找诸如加油站,餐馆,酒店,景点等目的地,这些目的地其实都可

随机推荐