10.设计模式&OO原则概览

保姆级教程:用STM32单片机实现国标交流充电桩的CP信号检测(附完整代码) 本文详细介绍了基于STM32单片机实现国标交流充电桩CP信号检测的全流程,包括硬件设计、软件架构和充电控制实现。通过分压电路设计、ADC配置和状态机逻辑,确保充电过程的安全与可靠性,适用于新能源汽车充电桩开发。附完整代码和调试技巧,助力开发者快速掌握关键技术。 阅读详情

10.设计模式&OO原则概览

  1. OO基本概念

    1. 抽象
    2. 封装
    3. 继承
    4. 多态
  2. OO原则

    1. 封装变化
    2. 多用组合,少用继承
    3. 针对接口编程,不针对实现编程
    4. 为交互对象之间的松耦合而努力
  3. 设计原则

    1. 找出可能变化的代码,把他独立封装,不要和那些不需要变化的代码混在一起
    2. 针对接口编程,而不是针对实现编程
  4. 良好的OO设计必须具备三个特性:

    1. 可复用
    2. 可以扩充
    3. 可维护
  5. OO原则是我们的目标,而设计模式是我们的做法

  6. 模式是被认为是历史验证的OO设计经验

  7. 大多数模式和原则,都着眼于软件变化的主题

  8. 知道抽象、继承、封装、多态并不会让你成为好的面向对象的设计者,设计应该更关注建立弹性的设计,可以维护,可以应对变化

  9. 举例

    1. 类图

    类图

    1. 代码

      1. Duck

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/17 上午8:11
         */
        public abstract class Duck {
            private Flyable flyable;
            private Quackable quackable;
        
            public Flyable getFlyable() {
                return flyable;
            }
        
            public void setFlyable(Flyable flyable) {
                this.flyable = flyable;
            }
        
            public Quackable getQuackable() {
                return quackable;
            }
        
            public void setQuackable(Quackable quackable) {
                this.quackable = quackable;
            }
        
            public void swim() {
                System.out.println("swimming.");
            }
        
            public abstract void display();
        
            public void quack() {
                System.out.println("original quack.");
            }
        
            public void fly() {
                System.out.println("original fly.");
            }
        }
        
        
      2. MallrdDuck

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/17 上午8:12
         */
        public class MallrdDuck extends Duck {
            @Override
            public void display() {
                System.out.println("green");
            }
        
            @Override
            public void quack() {
                this.getQuackable().quack();
            }
        
            @Override
            public void fly() {
                this.getFlyable().fly();
            }
        }
        
        
      3. RubberDuck

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/17 上午8:17
         */
        public class RubberDuck extends Duck {
            @Override
            public void display() {
                System.out.println("yellow");
            }
        
            @Override
            public void quack() {
                this.getQuackable().quack();
            }
        
            @Override
            public void swim() {
                super.swim();
            }
        
            @Override
            public void fly() {
                this.getFlyable().fly();
            }
        }
        
        
      4. Flyable

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * Created by presleyli on 2018/10/17.
         */
        public interface Flyable {
            void fly();
        }
        
        
      5. CanFly

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/19 上午7:32
         */
        public class CanFly implements Flyable {
            @Override
            public void fly() {
                System.out.println("I can fly...");
            }
        }
        
        
      6. CannotFly

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/19 上午7:32
         */
        public class CannotFly implements Flyable {
            @Override
            public void fly() {
                // do nothing.
            }
        }
        
        
      7. Quackable

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * Created by presleyli on 2018/10/17.
         */
        public interface Quackable {
            void quack();
        }
        
        
      8. CanQuack

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/19 上午7:33
         */
        public class CanQuack implements Quackable{
            @Override
            public void quack() {
                System.out.println("I can quack...");
            }
        }
        
        
      9. CannotQuack

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/19 上午7:33
         */
        public class CannotQuack implements Quackable{
            @Override
            public void quack() {
                // do nothing.
            }
        }
        
        
      10. Main

        package com.desmond.codebase.designpattern.overview.v4;
        
        /**
         * @author presleyli
         * @date 2018/10/17 上午8:14
         */
        public class Main {
            public static void main(String[] args) {
                MallrdDuck mallrdDuck = new MallrdDuck();
                mallrdDuck.setFlyable(new CanFly());
                mallrdDuck.setQuackable(new CannotQuack());
                mallrdDuck.fly();
                mallrdDuck.quack();
        
                RubberDuck rubberDuck = new RubberDuck();
                rubberDuck.setFlyable(new CanFly());
                rubberDuck.setQuackable(new CanQuack());
                rubberDuck.fly();
                rubberDuck.quack();
        
            }
        }
        
        
      11. Output:

        I can fly...
        I can fly...
        I can quack...
        
AMBA-CHI协议详解(五)  每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。 阅读详情

相关推荐

OSCS开源安全周报第13期:Exchange 高危漏洞公开

OSCS 社区共收录安全漏洞31个,公开漏洞值得关注的是 Apache Commons JXPath 存在代码执行漏洞(CVE-2022-41852),Microsoft Exchange 远程代码执行漏洞(ProxyNotShell(CVE-2022-41040),Apache Tomcat 条件竞争漏洞(CVE-2021-43980),FasterXML jackson-databind 小于2.14.0-rc1拒绝服务漏洞(CVE-2022-42003)。

OSCS开源安全社区 4198

.NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引

系列文章索引: .NET面试题解析(01)-值类型与引用类型 .NET面试题解析(02)-拆箱与装箱 .NET面试题解析(03)-string与字符操作 .NET面试题解析(04)-类型、方法与继承 .NET面试题解析(05)-常量、字段、属性、特性与委托 .NET面试题解析(06)-GC与内存管理 .NET面试题解析(07)-多线程编程与线程同步 .NET面试题解析(08...

weixin_33824363的博客 211

CPRI原理及应用--帧结构

对于CPRI 控制字,协议将1个超帧(256基本帧)的控制数据划分为一个“子通道”,将子通道内超帧内的控制字进行行列划分,分为4列X64行,每64个基本帧组成1列。如下图所示。每个Xs子通道内Ns的定义基本相同,在做控制字设计时,主要已Xs和Ns和X.Y.Z开展控制字映射。

u014035968的博客 2325

OO设计原则总结

什么是设计原则?  设计原则是基本的工具,应用这些规则可以使你的代码更加灵活、更容易维护,更容易扩展。基本原则  封装变化Encapsulate what varies. 面向接口编程而非实现 Code to an interface rather than to an implementation.优先使用组合而非继承 Favor Composition Over In

坚强2002@优快云 702

3D Slicer中Auto3DSeg和TotalSegmentator等自动分割插件总是安装失败,怎么办?教你两招

TotalSegmentator, MONAI auto3Dseg,这些工具因分割器官多,准确性高,备受关注。同时,这些自动分割工具被集成在了3D slicer平台,非常方便临床医生做手术规划。详细了解这些工具看之前的教程👇-------- 简单概述 --------其中,MONAIAuto3DSeg扩展附带数十种针对特定临床用例的预训练分割模型,这些模型旨在快速运行,几分钟内即可在任何普通计算机上运行,无需 GPU,甚至在笔记本电脑上。

zzjlhlcd的博客 1698

复合材料成型仿真案例大全|覆盖模压 / RTM / 固化 / SMC,实操步骤直接抄

本文整理了一套完整的PAM-COMPOSITE复合材料成型仿真案例合集,涵盖模压、RTM、固化变形、SMC四大核心工艺,包含6个实操案例和1个全流程衔接案例。每个案例都配有详细的操作步骤、核心要点和缺陷排查方法,适用于不同水平的工程师和研究人员。案例内容源自实际项目,可直接复用,帮助用户快速掌握复合材料成型仿真的关键技术,解决褶皱、纤维堆积、气泡残留等常见问题,实现从铺层设计到强度校核的全流程仿真闭环。特别针对热固性/热塑性材料差异、RTM衍生工艺、链式仿真等难点提供了专项解决方案。

源代码杀手的博客 320

.NET面试题解析(00)-系列文章索引

.NET面试题解析(01)-值类型与引用类型 .NET面试题解析(02)-拆箱与装箱 .NET面试题解析(03)-string与字符操作 .NET面试题解析(04)-类型、方法与继承 .NET面试题解析(05)-常量、字段、属性、特性与委托 .NET面试题解析(06)-GC与内存管理 .NET面试题解析(07)-多线程编程与线程同步 .NET面试题解析(08)-代码调试与异常处理 ...

weixin_30258901的博客 183

YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1811

OO与设计模式的原则、目标

前两天,和一朋友聊到OO设计原则时,对设计模式有了更深的了解,在这里总结一下,与大家分享。 OO(Object–Oriented )面向对象    OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由...

weixin_34290000的博客 195

19、CATIA V5:参数化建模与零件目录创建全解析

本文详细解析了在CATIA V5中通过设计表实现参数化建模及零件目录创建的完整流程。以支撑块和钩形夹为例,介绍了参数识别、设计表创建与关联、配置管理以及零件目录的构建方法。同时,提供了实际操作建议和注意事项,帮助设计师高效创建和管理零件族,提升设计效率和质量。

raspberrypi5的博客 448

手把手教你学simulink(28.2)--四旋翼无人机景示例:基于自抗扰控制(ADRC)的无人机姿态稳定系统

通过上述代码实现,您可以逐步创建和搭建一个基于自抗扰控制的无人机姿态稳定系统。该系统能够实时估计和补偿外部扰动及模型不确定性,确保无人机姿态稳定。自抗扰控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。无人机动力学建模:建立无人机的六自由度(6-DOF)动力学模型,包括位置、速度、姿态角和角速度。自抗扰控制器设计。

MHD0815的博客 500

Java 设计模式面试题

第 1 页 共 10 页一、你对 MVC 的理解, MVC 有什么优缺点?结合 Struts ,说明在一个 Web 应用如何去使用?答:MVC 设计模式(应用观察者模式的框架模式)M: Model(Business process layer) ,模型,操作数据的业务处理层 , 并独立于表现层 (Independe ntof presentation) 。V: View(Presentation ...

weixin_33836874的博客 895

DeerFlow 系列教程 第十六篇 | 实战案例一——用 DeerFlow 进行深度研究

在日常使用 AI Agent 时,最常见的需求之一就是对某个主题进行全面、系统的研究。多源信息采集——不能只依赖单次搜索,需要从多个角度搜索不同来源交叉验证——不同来源的信息需要相互印证,避免单一信源的偏差结构化输出——最终产出的不是零散的信息片段,而是有组织的研究报告传统做法是人工反复搜索、阅读、整理。传统手工研究: DeerFlow 深度研究:人工搜索 → 阅读页面 → 记笔记 提交研究主题│ │▼ ▼换关键词 → 再搜索 → 再阅读 ┌──────────────────┐。

weixin_43674738的博客 163

.NET面试题解析-多线程编程与线程同步

1.描述线程和进程的区别? 2.为什么GUI不支持跨线程调用?有什么解决方法? 3.前台线程和后台线程的区别 4. 说说常用的锁,lock是一种什么样的锁? 5.lock为什么要锁定一个参数(可否为值类型?)参数有什么要求? 6.多线程和异步的区别和联系 7.线程池的有点和不足 8.Mutex和lock有什么不同?一般用哪一种比较好? 9. 下面的代码,调用方法DeadLock

u011976734的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从入门到入土-基础篇-4 OO原则与设计模式

OO六大设计原则 单一职责原则(SRP) 开放封闭原则(OCP) 里氏替换原则(LSP) 依赖倒置原则(DIP) 接口隔离原则(ISP) 迪米特法则(LOD) 面向对象(OO)的基本特征: 抽象,先不考虑细节 封装,隐藏内部实现 继承,复用现有代码 多态,改写对象行为 单一职责的好处: 类的复杂性降低,因为只干一件事 可读性提高,复杂性降低了自然提高了可读性 可维护性提高,可读性提高了自然更加易于维护 变更的风险性降低,变更时只修改引起变化的类、接口或者方法,其他不受影响 ...

qq_14919677的博客 213

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

.NET面试题解析(11)-SQL语言基础及数据库基本原理

系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 本文内容涉及到基本SQL语法,数据的基本存储原理,数据库一些概念、数据优化等。抱砖引玉,权当一个综合复习! 常见面试题目: 0. 基本SQL语法题目,在 正文“基础SQL语法”中有13道题,这里就略过了。 1. 索引的作用?她的优点缺点是什么? 2. 介绍存储过程基本...

weixin_33753845的博客 505

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式:oo基础、原则及模式

OO基础: 抽象、继承、封装、多态。OO原则: 封装变化; 面向接口编程; 多用组合、少用继承; 为松耦合设计而努力; 开闭原则:对扩展开放、对修改关闭; 要依赖抽象,不要依赖具体类;

InterSaga的专栏 764

OO的五大原则中的 LSP(zt)

OO的五大原则中的 LSP(里氏替换原则) 现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法描述软件系统。然而,软件毕竟是建立在抽象层次上的东西,再怎么接近真实,也不能替代真实或被真实替代。 OO设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另...

guohui_fz 710

设计模式之OO原则

OOmianxiangduix OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。我的理解是,对于不同层次的编程,高层次暴露给低

jungleli3的专栏 1011

OO设计模式和设计原则

1.1 设计正在“腐烂”的征兆(Symptoms of Rotting Design) 有四个主要的征兆告诉我们该软件设计正在“腐烂”中。它们并不是互相独立的,而是互相关联,它们是过于僵硬、过于脆弱、不可重用性和粘滞性过高。 1. 过于僵硬Rigidity Rigidity 致使软件难以更改,每一个改动都会造成一连串的互相依靠的模块的改动,项目经理不敢改动,因为他永远也不知道一个改动何时才能完成。

leagle 1200

OO设计原则 -- OO设计的原则及设计过程的全面总结

前面发表了5篇OO设计原则的文章,在这里我将这个5个原则如何在我们设计过程进行应用进行一下总结, 这是我通过阅读和学习很多博文和资料后进行的一个梳理和总结,仅供大家来参考。 一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机

亿言 2万+

面向对象 Object-Oriented:Design Patterns:工厂设计模式:简单工厂模式、工厂模式、抽象工厂模式

最近面试的时候被问到了设计模型-工厂模式,虽然是老掉牙的问题了,但又回头翻了翻书,温故知新吧! 就像学了C++中类的基础知识就应该让自己习惯写出一个“较好”的类来:设计一个较好的类,会通过类来管理资源,即RAII(Resource Acquisition Is Initialization)原则,考虑类的复制构造函数,重载赋值=操作符等,会考虑C++中的内存管理、防止内存泄漏等问题。那么好了,设...

m0_37357063的博客 367

00设计七大原则

面向对象原则综述 七大原则总脉络图:                             注:1,2,3,4,5显示的重要等级           常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。            下面就是面向对象七个原则的一一解析 一、          开闭原则 1.          开闭原则

六石 1143

Java常用10种设计模式详解

一、单例模式 单例模式属于创建型模式,解决某个类频繁的创建与销毁。该模式保证了其对象在JVM中只有一个实例对象存在。必须保证私有化构造函数,只能有一个实例对象存在。 优点: 减少new关键字的使用,降低系统内存的使用频率,同时减轻GC工作 避免了资源的多重使用 缺点: 不可继承,没有接口。 1、饿汉式 优点:没有加锁同步,执行效率高 缺点:当类加载时就初始化,没有懒加载...

Dang.L 的博客 3万+

4.工厂模式

文章目录4.工厂模式简单工厂类图优缺点code输出工厂方法类图优缺点code输出抽象工厂类图优缺点code输出 4.工厂模式 简单工厂 类图 优缺点 优点 简单,解耦。 缺点 当需要扩充业务时,需要对BaoziFactory进行修改,当废弃某一产品时,也需要修改factory代码,产品过多,可能导致factory代码过长,冗余度高。 code package com.desmon...

desmond的专栏 530

15.观察者模式&发布/订阅模式

文章目录15.观察者模式&发布/订阅模式1. 观察者模式1.概念&优缺点2.类图3.代码2.发布-订阅模式1.概念2. 两个模式最重要的区别3. 差异总结 15.观察者模式&发布/订阅模式 1. 观察者模式 1.概念&优缺点 概念 观察者模式: 1. 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 2....

desmond的专栏 520
上一篇: 8.高级装配(二)
下一篇: 11.Bean使用拾遗(一)
desmond_assis
博客等级 码龄14年 33粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值