zoukankan      html  css  js  c++  java
  • 设计模式6大原则 总结

    1. 设计模式6大原则:
    封装相关的3个:1,2,3


    1 .单一职责原则(关注类的功能)(Single Responsibility Principle):一个类只干一件事,减少一个方法的修改影响另一个;职责分拆,分支逻辑分拆,拆分父类+子类,每个类很简单,简单意味着稳定,意味着强大,拆分后代码量多了
    1.方法级别单一职责原则:一个方法只负责一件事,
    2.类级别单一职责原则:一个类只负责一件事,
    3.类库级别的单一职责原则;一个类库应该职责清晰
    4.项目级别的单一职责原则,一个项目应该职责清晰(客户端/管理后台,后台服务,定时任务,分布式引擎)
    5.系统级别的单一职责原则:为通用功能拆分系统(IP定位,日志,在线统计)

    2.里氏替换原则(关注类与类相关直接的类,学校类只关注班级类,不关注学生类):
    1.任何使用基类的地方,都可以透明(安全,不会行为不一致)的使用其子类 ,
    2.子类可以有自己独有的属性和行为;
    3.父类实现的东西,子类不要在写了(不要new 隐藏),防止出现行为调用不一致,如果想修改父类的行为,通过abstarct/virtual;
    继承:子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类来代替;
    多态:通用abstract/virtaul 实现多态

    3.迪米特法则:最少知道原则,:一个对象应该对其他对象保持最少的了解;
    :只与直接的朋友通信;降低了类与类直接的耦合
    类与类直接的关系:
    纵向:继承
    横向:聚合》组合包含>耦合
    依赖别人更少,让别人了解更少(private,protected,internal,protected internal(子类或者类库),public);

    4. 依赖倒置原则(面向抽象编程):高层模块不依赖底层模块,应通过抽象来依赖
    依赖抽象,不要依赖细节
    抽象:是指接口,抽象类,--可以没有元素的实现
    细节:普通类--一切都是确定的
    抽象类==泛型类
    面向抽象的好处:一个方法满足不同类型的参数,只有是实现了这个抽象,都可以用;支持扩展
    面向对象的开发,就是类与类之间进行交互,如高层之间依赖底层的细节,细节是多变的,
    面向抽象的开发:高层和底层没有直接依赖,而是依赖抽象,抽象是稳定的;80%的设计模式是抽象完成的;
    属性,字段,方法参数 返回值...尽量都是抽象
    依赖倒置原则:IOC控制反转;

    5.接口隔离原则:客户端不应该依赖它不需要的接口
    一个类对另一个类的依赖应该建立在最小的接口上;
    接口到底如何定义:
    1.接口不能大而全,不实现自己不需要的接口的东西;
    2.也不能一个方法一个接口,这样抽象没有意义;
    3.接口合并,接口继承

    6.开闭原则:对扩展开发,对修改关闭
    修改:修改现有代码,扩展:新增代码类
    声明属性,字段,变量,尽量声明为父类
    开闭原则是一个目标,并没有任何的手段,也被称为总则,其他5个原则的建议,就是为了更好的做到OCP;
    修改现有方法-->增加方法-->增加类-->增加/替换类库(不用修改编译发布代码)
    指导性原则,
    //泛型
    public void Play<T>(T phone) where T:AbstractPhone
    {
    phone.Call();
    }
    //抽象类
    public void Play(AbstractPhone phone)
    {
    phone.call();
    }

    1.静态类:静态方法不占内存,方法内申请的临时变量随时释放;静态字段--唯一的占据内存,不会释放;
    2.virtual 和 abstract 区别:
    virtual: 虚方法子类需要改下,不需要不用改写;
    abstract:抽象方法子类必须实现填写代码;
    3.字段和属性区别(权限控制更细):public in height {private get;set;}
    public in salay;
    4. 类与类直接的关系:
    纵向:继承
    横向:聚合》组合包含>耦合
    5.继承:子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类来代替;
    6.多态:通用abstract/virtaul 实现多态 ,不用new 关键字隐藏

  • 相关阅读:
    快速上手php:使用PhpStrom调试php
    快速上手php:使用PhpStrom部署项目
    使用自定义tld标签简化jsp的繁琐操作
    京东购物体验杂谈
    Mysql将近两个月的记录合并为一行显示
    学习WebSocket(二):使用Spring WebSocket做一个简单聊天室
    学习WebSocket(一):Spring WebSocket的简单使用
    springMVC的@ResponseBody、@RequestBody使用需要注意的地方
    如何使用maven建一个web3.0的项目
    项目管理工具 Redmine 安装试用手记
  • 原文地址:https://www.cnblogs.com/csj007523/p/14321558.html
Copyright © 2011-2022 走看看