Giter Club home page Giter Club logo

design-pattern's Introduction

设计模式 学习项目

学习笔记:


一、 面向对象

1、面向对象三要素: 继承 封装 多态

继承: 子类继承父类 把公用的要素放在父类,剥离开来

封装: 隐藏细节信息不对外暴露
三个关键字 : private 自己的类里使用
public 无隐私公用
protected 自己与子类享用

    1.减少耦合  
      
    2.es6 目前不支持 只能TS  下划线 _ 开头的一般都是private属性  

多态: 接口的不同实现

2.面向对象的意义 为了是数据结构化 ,便于计算机处理


二、UML 类图

UML ---> unified modeling language 统一建模语言

1.泛化 表示继承 UML类图中使用空心箭头指向父类

"+" 表示是public类型
"-" 表示是private类型
"#" 表示是protected类型

2.关联 表示引用 UML类图中使用实心箭头


三、设计原则

来源于 《UNIX/LINUX设计哲学》

1.小即是美

2.让每个程序只做好一件事

3.快速建立原型(快速搭建出可用的原型先给用户使用,得到反馈继续搭建)

4.舍弃高效率而选择通用可移植性(未来硬件因素可以抹平舍弃高效率的劣势)

5.采用纯文本存储数据 (可读性最重要,而不是用二进制存储提高效率)

6.充分利用软件的杠杆效应 (代码复用)

7.使用shell脚本提高软件杠杆效应和可移植性

8.避免强制性的用户界面 (图像化界面)

9.让每个程序都能称为过滤器 跟第二点一致

小准则

  • 允许用户定制环境

  • 尽量使操作系统内核小和轻量化

  • 沉默是金

  • 各部分之和大于整体

  • 寻求90%解决方案 (90%满足需求的人即可)

五大设计原则 S O L I D

S - 单一职责原则 (simple)

  • 一个程序制作好一件事
  • 如果功能过于复杂就拆分,每个部分保持独立
    O - 开放封闭原则 (open)
  • 对扩展开放,对修改封闭
  • 增加需求时,扩展新代码,而非修改已有代码
  • 这是软件设计的终极目标

L - 李氏置换原则 (Liskov Substitution Principle)

  • 子类能覆盖父类
  • 父类能出现的地方子类就能出现
  • JS中使用较少(因为JS弱类型 & 继承使用较少)

I - 接口独立原则 (interface)

  • 保持接口的独立单一,避免出现“胖接口”
  • JS中没有接口,TS除外 使用较少
  • 类似于单一职责原则,这里更关注接口

D - 依赖导致原则 (dependence)

  • 面向接口编程,依赖于抽象而不依赖于具体
  • 使用方只关注接口而不关注具体类的实现
  • JS中使用较少

用Promise来说明 S O

  • 单一职责原则: 每个then中的逻辑只做好一件事

  • 开放封闭原则: 如果新增需求,扩展then (对扩展开放,对修改关闭)

    23种设计模式 涵盖着下面三种类型

    1. 创建型
    • 工厂模式(工厂方法模式,抽象工厂模式,建造者模式)
    • 单例模式
    • 原型模式
    1. 组合型
    • 适配器模式
    • 装饰器模式
    • 代理模式
    • 外观模式
    • 桥接模式
    • 组合模式
    • 享元模式
    1. 行为型
    • 策略模式
    • 模板方法模式
    • 观察者模式
    • 迭代器模式
    • 职责连模式
    • 命令模式

    行为型-2

    • 备忘录模式
    • 状态模式
    • 访问者模式
    • 中介者模式
    • 解释器模式

    1. 工厂模式 介绍
      * 将new操作单独封装
      * 遇到new时 就应该考虑是否要使用工厂模式 应用场景
      • jquery - $("div")
      • react.createElement 此方法返回一个 Vnode实例
      • vue 异步组件
        (设计原则验证)
    • 构造函数和创建者分离
    • 符合开放封闭原则
    1. 单例模式 介绍
      * 系统中被唯一使用 * 一个类只生产一个实例

design-pattern's People

Contributors

ypinchina avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.