首页 > 其他分享 >软件设计原则

软件设计原则

时间:2023-07-11 23:35:10浏览次数:34  
标签:输入法 原则 软件设计 void 皮肤 AbstractSkin skin public

目录

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

1. 开闭原则

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

想要达到这样的效果,我们需要使用接口和抽象类。

因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

下面以 搜狗输入法 的皮肤为例介绍开闭原则的应用。

【例】搜狗输入法 的皮肤设计。

分析:搜狗输入法 的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和HguoSpecificSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。

  • 举个例子:
/**
 * 抽象皮肤类
 */
public abstract class AbstractSkin {

    //显示的方法
    public abstract void display();
}
/**
 * 默认皮肤类
 */
public class DefaultSkin extends AbstractSkin {

    public void display() {
        System.out.println("默认皮肤");
    }
}
/**
 * 火锅皮肤
 */
public class HguoSkin extends AbstractSkin {

    public void display() {
        System.out.println("火锅皮肤");
    }
}
/**
 * 搜狗输入法
 */
public class SougouInput {

    private AbstractSkin skin;

    public void setSkin(AbstractSkin skin) {
        this.skin = skin;
    }

    public void display() {
        skin.display();
    }
}

测试:

/**
 * 后续再新增其他新皮肤,不用修改已经生成的皮肤,这样达到了对扩展开放,对修改关闭
 */
public class Client {
    public static void main(String[] args) {
        //1,创建搜狗输入法对象
        SougouInput input = new SougouInput();
        //2,创建皮肤对象
        //DefaultSkin skin = new DefaultSkin();
        HguoSkin skin = new HguoSkin();

        //3,将皮肤设置到输入法中
        input.setSkin(skin);

        //4,显示皮肤
        input.display();
    }
}

2. 里氏代换原则

标签:输入法,原则,软件设计,void,皮肤,AbstractSkin,skin,public
From: https://www.cnblogs.com/leizia/p/17546234.html

相关文章

  • 就近原则和this关键字
    在Java中,this是一个引用,它指向当前对象的实例。它可以用于以下几个方面:用于区分局部变量和实例变量:在方法或构造函数中,如果存在一个局部变量和一个实例变量同名,可以使用this关键字来引用实例变量。这样可以明确地告诉编译器你要使用的是实例变量,而不是局部变量。用于在一个......
  • 架构设计原则
    架构设计原则合适原则:合适优于业界领先考虑人员多少考虑时间成本,罗马不是一天建成的结合业务设计简单原则:简单优于复杂结构越复杂可用率越低逻辑越复杂,开发越慢,排查越慢演化原则:演化优于一步到位架构需要随业务的变化而变化不断迭代,去其糟粕留其精华......
  • 合成复用原则
    尽量使用合成/聚合的方式,而不是使用继承。只有当以下的条件全部被满足时,才应当使用继承关系,1、子类是超类的一个特殊种类,而不是超类的一个角色,也就是区分“Has-A”和“Is-A”。只有“Is-A”关系才符合继承关系,“Has-A”关系应当使用聚合来描述。2、永远不会出现需要将子类换成另外......
  • 里氏替换原则
    里氏替换原则,面相对象设计的基本原则之一。里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是继承服用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏替换原则是对“开-闭”原则的补......
  • 设计模式之类之间的关系和六大原则
    1类之间的关系类与类之间的关系大概有6种,要看懂UML图,首先需要了解这几种关系。1.1继承关系继承指的是一个类(称为子类,子接口)继承另外的一个类(成为父类,父接口)的功能,并可以增加它自己的新功能的能力。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或......
  • 教学软件设计方案及程序
    很多人在教学行业使用久远,在教学道路上缺少很多多媒体工具:例如计算器,多媒体助手等,今天推荐一款软件,作者原创开发,C#编译,可教学使用,不可商用!软件下载(推荐,下载不限速):https://www.123pan.com/s/e7LDVv-ImFmH.htmlgithub:https://github.com/da0505/C-sharp软件代码(本代码已经过测......
  • 182_Power BI 使用 DAX 按照先进先出原则计算毛利润
    182_PowerBI使用DAX按照先进先出原则计算毛利润一、背景在笔者以往的文章中也有先进先出的案例,可以参考(https://jiaopengzi.com/?s=先进先出)。今天我们来看一个网友提出的问题,先进先出的原则,入库和出库的价格都是不统一的。按照出库的日期来计算先进先出的sku的毛利(......
  • 与 TDengine 性能直接相关——3.0 的落盘机制优化及使用原则
    许多用户会有一个疑问,“落盘”俩字听起来就很底层,似乎无法和手头的性能问题联系到一起,本篇文章的目的就是让大家对它们俩建立起直观的认识。写到数据库的数据总要保存起来——所以时序数据库(TimeSeriesDatabase)TDengine中经常提到的“落盘”,其实指的是内存中的数据持久化到存......
  • happens-before 原则
    happens-before简述从JDK5开始,Java使用新的JSR-133内存模型。JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一......
  • 面向对象的高级原则
    1、开放/封闭原则模块应该对扩展开放,对修改关闭。每个类型应该是固定的,不在未来有任何变化,更不要修改类型的源代码。即类型对修改关闭。每次发生变化时,要通过添加新代码来增强现有类的行为,而不是修改原有代码。可以使用如下两种方式:①用组合创建新的类型。②使用安全干净的继......