设计模式 面向对象(1)

简介: 设计模式 面向对象(1)

1、学习内容概述

网络异常,图片无法展示
|

2、面向对象 ?

1、搭建开发环境

网络异常,图片无法展示
|

1、新建空文件夹 
2、npm 初始化 npm init -y 
3、新建一个 src文件夹 创建一个 index.js
4、安装 yarn add webpack webpack-cli --save-dev
复制代码
5、简单配置一下 webpack 
module.exports = {
  entry: "./src/index.js", // 入口
  output: {
    path: __dirname, //当前文件
    filename: "./release/bundle.js", //打包后文件夹和文件
  },
};
6、scripts 需要配置一个 dev 指向刚才创建的config文件 
 "dev": "webpack --config ./webpack.dev.config.js --mode development"
复制代码
7、执行 打包成功 这个 应该是最简单的webpack打包过程
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

8、安装 yarn add webpack-dev-server html-webpack-plugin --save-dev
9、根目录下新建 index.js  随意写一点内容就行
10、修改 dev-config文件 
复制代码
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
  entry: "./src/index.js", // 入口
  output: {
    path: __dirname, //当前文件
    filename: "./release/bundle.js", //打包后文件夹和文件
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
  devServer: {
    contentBase: path.join(__dirname, "./release"), //根目录下的release文件夹 打包后的文件
    open: true, //打开浏览器
    port: 9000,
  },
};
复制代码
11、更改配置文件 使用 dev-server 
"dev": "webpack-dev-server --config ./webpack.dev.config.js --mode development"
12、执行 yarn dev
复制代码
  • 执行 上面那个报错

网络异常,图片无法展示
|

  • 查看官网 更改为  下面 static 那种表达即可
devServer: {
    // contentBase: path.join(__dirname, "./release"), //根目录下的release文件夹 打包后的文件
    static: {
      directory: path.join(__dirname, "./release"),
    },
    open: true, //打开浏览器
    port: 9000,
  },
复制代码
  • 然后 yarn dev

网络异常,图片无法展示
|

  • 非常nice
  • 当更改 index.js 100--> 200 页面也会同步刷新

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、使用 babel 解析 es6

1、安装一堆插件

yarn add babel-core babel-loader babel-polyfill babel-preset-es2015 babel-preset-latest --save-dev
复制代码

2、创建 .babelrc

网络异常,图片无法展示
|

  • 添加 module
    网络异常,图片无法展示
    |

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 执行 后 查看

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 到此处 环境 ok es6处理也ok了

3、面向对象 ?

网络异常,图片无法展示
|

* class类(模版) 和 对象(new实例化出的实例 可有很多)

class Person {
      constructor(name, age) {
        (this.name = name), (this.age = age);
      }
      eat() {
        console.log(`${this.name} eat some `);
      }
      speak() {
        console.log(`${this.name} has ${this.age} years old`);
      }
    }
    var xiaowang = new Person("jack", 18);
    xiaowang.eat();
    xiaowang.speak();
复制代码
  • 三要素

网络异常,图片无法展示
|

1、继承

  • 继承的例子  重点在于constructor 和 super
  • 继承 实际例子 xxx 组件 extends React.Component {} 继承自react 组件
class Person {
      constructor(name, age) {
        (this.name = name), (this.age = age);
      }
      eat() {
        console.log(`${this.name} eat some `);
      }
      speak() {
        console.log(`${this.name} has ${this.age} years old`);
      }
    }
    class Student extends Person {
      constructor(name, age, number) {
        super(name, age);
        this.number = number;
      }
      study() {
        console.log(`${this.name} like study`);
      }
      speak() {
        console.log(`${this.name} also like speak`);
      }
    }
    var xiaoqiang = new Student("xiaojia", 18, "A6");
    xiaoqiang.study(); // xiaojia like study
    xiaoqiang.speak(); // xiaojia like study
复制代码
  • 需要注意的部分

网络异常,图片无法展示
|

2、封装

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 这个在 ts 中有效
  • 可以在这个 网站 运行 ts

www.typescriptlang.org/zh/play?#co…

class Person {
        name
        age
        protected weight
        private dog
      constructor(name, age, weight,dog) {
        this.name = name, this.age = age , this.weight = 120 , this.dog = 'ppx'
      }
      eat() {
        console.log(`${this.name} eat some `);
      }
      speak() {
        console.log(`${this.name} has ${this.age} years old`);
      }
    }
    class Student extends Person {
        number
        private friend
      constructor(name, age,weight, number, friend) {
        super(name, age,weight,dog);
        this.number = number
        this.friend = friend
      }
      study() {
        console.log(`${this.name} like study`);
      }
      speak() {
        console.log(`${this.name} also like speak`);
      }
      getWeight(){
          console.log(`get ok of ${this.weight}`)
      }
      getFriend(){
          console.log(`${this.friend}`)
      }
      getDog(){
          console.log(`${this.dog}`)
      }
    }
    var xiaoqiang = new Student("xiaojia", 18, 120,'A6', 'xiaoli');
    xiaoqiang.study(); // xiaojia like study
    xiaoqiang.speak(); // xiaojia like study
    xiaoqiang.getWeight()
    xiaoqiang.getFriend()
    xiaoqiang.getDog()
复制代码

3、多态

  • 定义 同一个 接口 在子类中可实现不同的功能
  • 代码 示例
class People {
      constructor(name) {
        this.name = name;
      }
      sayName() {
        console.log(this.name);
      }
    }
    // 都继承自People 但实例化后表现结果不一样
    let a = new People("a");
    a.sayName(); // a
    let b = new People("b");
    b.sayName(); // b
复制代码

网络异常,图片无法展示
|

4、面向对象 实际案例 ?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

*代码 演示一下

  • 非常 nice 下面代码 起码学会了 2间事情
1、面向对象在 jQuery 怎么应用的 ?
 2、如何实现 jQuery的思路 ? 
 3、jQuery 就是一个类  ?
复制代码
<body>
    <p>啦啦啦-1</p>
    <p>啦啦啦-2</p>
    <p>啦啦啦-3</p>
  </body>
  <script>
    class jQuery {
      constructor(selector) {
        let slice = Array.prototype.slice;
        let dom = slice.call(document.querySelectorAll(selector)); // 拿到dom 并slice.call()转为 对象
        let len = dom ? dom.length : 0;
        for (let i = 0; i < len; i++) {
          this[i] = dom[i];
        }
        this.length = len;
        this.selector = selector || "";
      }
      append(node) {}
      addClass(name) {}
      html(data) {}
      // 省略更多 API
    }
    // 实例化 
    window.$ = function (selector) {
      return new jQuery(selector);
    };
    // test
    var $p = $("p");
    console.log($p); // jQuery {0: p, 1: p, 2: p, length: 3, selector: "p"}
    console.log($p.append); // ƒ append(node) {}
  </script>
复制代码

5、为何使用 面向对象 ?

网络异常,图片无法展示
|

6、UML 类图 ?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 动手试试

网络异常,图片无法展示
|

网络异常,图片无法展示
|

7、UML 类图 关系图(多个继承/关联关系) ?

  • 演示代码
class Person {
      constructor(name, age,house) {
        (this.name = name), (this.age = age),this.house = house;
      }
      saySomething(){}
    }
    class StudentA extends Person {
      constructor(name,houser) {
        super(name, house);
      }
      saySomething(){console.log('I am A ')}
    }
    class StudentB extends Person {
      constructor(name,house) {
        super(name, house);
      }
      saySomething(){console.log('I am B ')}
    }
    class House{
        constructor(city){
            this.city = city
        }
        showCity(){
            console.log(`${city}`)
        }
    }
复制代码
  • UML 类图 展示

网络异常,图片无法展示
|

8、总结  ?

1、开发前 画出 UML 类图 展示



相关文章
|
4月前
|
设计模式 数据库连接 PHP
PHP编程中的面向对象与设计模式
在PHP编程世界中,掌握面向对象编程(OOP)和设计模式是提升代码质量和开发效率的关键。本文将深入浅出地介绍如何在PHP中应用OOP原则和设计模式,以及这些实践如何影响项目架构和维护性。通过实际案例,我们将探索如何利用这些概念来构建更健壮、可扩展的应用程序。
|
7月前
|
设计模式 算法 架构师
【搞懂设计模式】设计模式与面向对象原则
【搞懂设计模式】设计模式与面向对象原则
76 1
|
6月前
|
设计模式 存储 Java
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
30 0
|
7月前
|
设计模式 Java 编译器
Java 设计模式最佳实践:一、从面向对象到函数式编程
Java 设计模式最佳实践:一、从面向对象到函数式编程
107 0
|
设计模式 算法 关系型数据库
设计模式——设计模式简介、分类及面向对象设计原则
23 种设计模式中有些模式今天已经不流行了,有些模型已经被语言机制替代了,有些模式你可能常常会忘记,但这些都不重要,重要的是设计原则,因为有了这些设计原则,你有可能发明自己的模式,你也可以理解未来千千万万其他领域的模式。
104 1
|
设计模式 算法 C#
28【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用
实现商场收银系统从简单的面向过程到面向对象的演变。
176 0
|
设计模式 SQL 开发框架
【Java设计模式 面向对象设计思想】六 再谈MVC贫血模式与DDD领域驱动开发
【Java设计模式 面向对象设计思想】六 再谈MVC贫血模式与DDD领域驱动开发
319 1
|
设计模式 Java
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
243 0
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
|
设计模式 存储 安全
【大话设计模式】面向对象基础
【大话设计模式】面向对象基础
|
设计模式 C++
面向对象方法-大话设计模式+J2SE视频
面向对象方法-大话设计模式+J2SE视频