《设计模式之禅》笔记整理--面对对象设计六大原则

第一章、面对对象设计六大原则:

(1)、单一职责原则:应该有且只有一个原因引起类的变更。

为什么要用单一职责原则:(1)、类的复杂性降低,实现什么职责都有清晰明确的定义。

            (2)、可读性提高,复杂性降低,当然可读性提高了。

            (3)、可维护性提高,可读性提高,当然更容易维护了。

           (4)、变更引起的风险降低,一个接口修改,只对相应的实现类有影响。

职责划分的例子:电话过程可以划分为两个职责:(1)、协议管理(2)、数据传送

       :RBAC模型,基于角色的访问控制

(2)、里氏替换原则:目的:增强程序的健壮性,版本升级时也可以保持非常好的兼容性。即时增加子类,原有的子类还可以继续运行。

继承的优点:(1)、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性。

      (2)、提高代码的重用性。

      (3)、子类可以形式父类但又异于父类。

      (4)、提高代码的可扩展性。

      (5)、提高产品的或项目的开放性

继承的缺点:(1)、继承是侵入性的。

      (2)、降低代码的灵活性。

      (3)、增强了耦合性。

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

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

定义的4层含义:

(1)、子类必须完全实现父类的方法。(如果子类不能完整的实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承)

(2)、子类可以有自己的个性(向下转型是不安全的)

(3)、覆盖或实现父类的方法时输入参数可以被放大 :子类将永远不会被执行,子类方法中的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松

 1 public class test{
 2     public static void main(String[] args){
 3         Father f = new Father() ;
 4         HashMap map = new HashMap();
 5         f.doSomething(map);
 6         Son s = new Son();
 7         s.doSomething(map);
 8
 9
10     }
11 }
12 class Father {
13     public Collection doSomething(HashMap map) {
14         System.out.println("父类被执行...");
15         return map.values();
16     }
17 }
18 class Son extends Father{
19     public Collection doSomething(Map map) {
20         System.out.println("子类被执行...");
21         return map.values();
22     }
23 }

(4)、覆写或实现父类的方法时输出结果可以被缩小

(3)、依赖倒置原则:

原始含义:

(1)、高层模块不应该依赖低层模块,两者都应该依赖其抽象

(2)、抽象不应该依赖细节

(3)、细节应该依赖抽象

时间: 2024-10-17 16:51:06

《设计模式之禅》笔记整理--面对对象设计六大原则的相关文章

JAVA程序设计(07.3)-----面对对象设计 时钟

1.面对对象设计 时钟的类  3种录入方式(重载) package com.lovo; import java.text.DecimalFormat; import java.util.Calendar; /** * 时钟 类 * @author Abe * */ /** * 属性, 小时,分钟,秒 * * @author Abe * */ public class Clock { private int hour; private int min; private int sec; /** *

面对对象编程七大原则

面对对象编程七大原则: 1. OCP 全称:“Open-Closed Principle” 开放-封闭原则 说明:对扩展开放,对修改关闭. 优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性.灵活性.稳定性都比较好.当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能.增加的新模块对原有的模块完全没有影响或影响很小,这样就无须为原有模块进行重新测试. 如何实现“开-闭”原则 在面向对象设计中,不允许

设计模式之禅笔记下部

这是我看的第一本设计模式,由于觉得个人代码量不多,一直没有看,现在也只是了解为主,平时稍加注意,过一两年再详细研究.由于本人粗心大意,写在word里没有保存我就重装系统...这里只记下了下半部分. <设计模式之禅>这本书,讲的还是比较浅显易懂,这种java这种强类型语言,讲究封装和继承,用于讲解设计模式再合适不过了.例子引入对于初学者而言还是挺不错的,可惜后文讲解有点流于表面了.下面我就贴出笔记. 笔记 #装饰模式(Decorator Pattern) 动态的给一个对象添加职责,就增加功能来说

写给自己看的小设计3 - 对象设计通用原则之核心原则

由于对象设计的核心是类,所以下面的原则也都基本都是讨论类的设计问题,其它类型的元素都比较简单,基本上也符合大多数这里列出的原则. 前面我们分析完了对象设计的基本原则,这里我将重新温习一下对象设计的核心原则 - SOLID原则.几乎所有的设计模式都可以看到这些原则的影子. 单一职责原则(SRP):做一个专一的人 单一职责原则的全称是Single Responsibility Principle,简称是SRP.SRP原则的定义很简单: 即不能存在多于一个导致类变更的原因.简单的说就是一个类只负责一项

Java对象设计通用原则之核心原则

由于对象设计的核心是类,所以下面的原则也都基本都是讨论类的设计问题,其它类型的元素都比较简单,基本上也符合大多数这里列出的原则. 前面我们分析完了对象设计的基本原则,这里我将重新温习一下对象设计的核心原则 - SOLID原则.几乎所有的设计模式都可以看到这些原则的影子. 单一职责原则(SRP):做一个专一的人 单一职责原则的全称是Single Responsibility Principle,简称是SRP.SRP原则的定义很简单: 即不能存在多于一个导致类变更的原因.简单的说就是一个类只负责一项

接口设计六大原则

一.单一职责原则 Single Responsibility Principle, 简称SRP. 定义:There should never be more than one reason for a class to change. 应该有且仅有一个原因引起类的变更. 职责的划分?单一的定义和级别? 应该根据实际业务情况而定.关注变化点. 实际使用时,类很难做到职责单一,但是接口的职责应该尽量单一. 二.里氏替换原则 Liskov Substitution Principle, 简称LSP.

《Effective C++》继承与面对对象设计:条款32-条款40

条款32:确定你的public继承塑模出is-a关系 public继承意味着is-a.适用于base class身上的每一个函数也一定适用于derived class. 条款33:避免遮掩继承而来的名称 几层作用域: global作用域 namespace作用域 Base class作用域 Drive class作用域 成员函数 控制块作用域 当前作用域会遮掩上一层作用域的名称(重载的函数也会直接遮掩) class Base{ public: void f1(); } class Drive :

JAVA程序设计(09)-----面对对象设计初级应用 龟兔赛跑

1.乌龟和兔子共有属性和方法 做成父类 避免重复代码 package com.lovo; /** * 类: 动物 * @author Abe * 属性: 名字 步距 总距离 睡觉的日子 */ public class Animal { protected String name; protected int step; protected int distance; protected int sleepDay; /** * 构造器 * @param name */ public Animal(

设计模式六大原则/接口设计六大原则 之 迪米特法则(转)

定义:一个对象应该对其他对象保持最少的了解.迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话.英文简写为: LoD. 目的:迪米特法则的初衷在于降低类之间的耦合.由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系. 迪米特法则不希望类之间建立直接的联系.如果真的有需要建立联系,也希望能通过它的友元类来