对面向对象基本原则的总结

(一)代理模式

应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。

优势:解耦合

敏捷原则:开放-封闭原则

实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。

列表row个数delegate

自定义的delegate

(二)观察者模式

应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。

优势:解耦合

敏捷原则:接口隔离原则,开放-封闭原则

实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。

kvo,键值对改变通知的观察者,平时基本没用过。

(三)MVC模式

应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。

优势:使系统,层次清晰,职责分明,易于维护

敏捷原则:对扩展开放-对修改封闭

实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。

(四)单例模式

应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

优势:使用简单,延时求值,易于跨模块

敏捷原则:单一职责原则

实例:[UIApplication sharedApplication]。

注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。

java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。

object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,

返回的也只是此单例类的唯一静态变量。

(五)策略模式

应用场景:定义算法族,封装起来,使他们之间可以相互替换。

优势:使算法的变化独立于使用算法的用户

敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。

实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。

注意事项:1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类

2,变化的行为抽象基类为,所有可变变化的父类

3,用户类的最终实例,通过注入行为实例的方式,设定易变行为

防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。

(六)工厂模式

应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。

优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。

敏捷原则:DIP依赖倒置原则

实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换

注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,

增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。

时间: 2025-01-07 01:45:55

对面向对象基本原则的总结的相关文章

一、面向对象基本原则

在正式介绍设计模式之前,首先来简单说一下面对对象基本原则. 1.单一职责原则 其核心思想为:一个类,最好只做一件事情,只有一个引起它的变化 2.开放封闭原则 其核心思想为:软件实体应该是可以扩展的,而不可修改的.也就是对扩展开放,对修改封闭 3.依赖倒置原则 其核心思想为:依赖于抽象.具体而言就是高层模块不依赖于底层模块,两者都同依赖于抽象.抽象不依赖于具体,具体依赖于抽象 4.接口隔离原则  其核心思想为:使用多个小的专门的接口,不要使用一个大的总的接口 5.Liskov替换原则 其核心思想为

《你必须知道的.NET》读书笔记一:小OO有大智慧

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象  (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个对象实体就完成了出生过程. Person aPerson = new Person("小周" , 25); (2)旅程:在某种程度上就是外界通过方法与对象交互,从而达到改变对象状态信息的过程.这也和人的生存之道暗合. aPerson.ChangeName("Edis

分享这几年收藏的C# PDF电子书定制制作下载

本人背靠海量纸质图书,可以制作各种纸质书籍的电子化,有需要可以Q:1481449626 <基于ASP.NET的网站建设与管理 C#>作者:陈光军,韩立军主编 页数:300 出版社:北京市:北京邮电大学出版社 出版日期:2013.05 简介:本书共分12章,列举大量实例,详细介绍了网站建设与管理的最新理念与应用技术,从网站的建设目标.总体规划开始,全面论述了网站建设与管理的基本知识.网页设计和制作的技术与技巧. <C#实用教程>作者:郑阿奇 页数:364 出版社:北京市:电子工业出版

Androidproject师进阶之路 :《Android开发进阶:从小工到专家》上市啦!

封面 文件夹1 文件夹2 - 当当购买链接 - 京东购买链接 为什么写这本书 写这本书的念头由来已久了. 或许是从我打算写<Android源代码设计模式解析与实战>那时起就萌生了这个念头,由于设计模式属于仅次于架构之下的局部战术.阅读这类书籍可以让具备一定工作经验的开发者提升自己的设计能力,构建更灵活的软件.可是.对于初.中级project师而言,最重要的还是在于基础知识以及知识广度的掌握上.因此,在<Android源代码设计模式解析与实战>交稿之后,我就马上開始了本书的写作之旅.

最新、程序员应该具备的12种能力!

  下面是我总结的一个合格程序员应该具备的 12种能力.中国软件行业的崛起,靠的是合格的程序员.任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基 础.写下这些,是为了给刚刚进入程序员这个职业的新同学们一点参考.我一直以为,当程序员是很辛苦的,如果不是真正的喜欢,很难坚持下去.如果真的不喜欢 这个职业,也该尊重这个职业,尊重自己,赶紧改行. 1. 编程语言能力 不用多说,作为合格的程序员,精通一门语言是必须的.这种精通,不是说看了一本<24小时精通XXX>

程序员应该具备的能力

1. 编程语言能力 不用多说,作为合格的计算机程序员,精通一门语言是必须的.这种精通,不是说看了一本编程宝典,抄了几个程序就能说精通的,要靠长时间的积累. 2.编码能力 我曾经看很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的.就 像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂.遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严 重性.另外一个就是注释,要注意不是为了

Android工程师进阶之路 :《Android开发进阶:从小工到专家》上市啦!

封面 目录1 目录2 - 当当购买链接 - 京东购买链接 为什么写这本书 写这本书的念头由来已久了.也许是从我打算写<Android源码设计模式解析与实战>那时起就萌生了这个念头,因为设计模式属于仅次于架构之下的局部战术,阅读这类书籍能够让具备一定工作经验的开发人员提升自己的设计能力,构建更灵活的软件.但是,对于初.中级工程师而言,最重要的还是在于基础知识以及知识广度的掌握上.因此,在<Android源码设计模式解析与实战>交稿之后,我就立即开始了本书的写作之旅. 从面试经历和与开

java设计模式 GOF23 02 工厂模式

package com.lz.factory.simpleFactory; /* * * 补充:面向对象基本原则 * OCP:(开闭原则)添加新功能不应该修改原有代码,而是添加新的类 * DIP:(依赖倒转原则)依赖接口编程 * LOD:(迪米特法则)降低耦合,只和必要的对象通信 * 静态工厂类 { * 创建者和调用者的分离 * * 简单工厂问题:添加新功能需要修改代码 * } * 工厂方法类{ * 代码过多 * } * 两者比较 * 简单工厂结构代码更简单 * 工厂方法更难维护 * 总结:工厂

程序员应该具备的12种能力

1. 编程语言能力 不用多说,作为合格的程序员,精通一门语言是必须的.这种精通,不是说看了一本<24小时精通XXX>,抄了几个程序就能说精通的,要靠长时间的积累和浸淫. 2.编码能力 我曾经看多很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的.就像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂.遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性.随意堆砌网上搜来的