設計模式清單
沒有連結的是還沒有寫的,計劃要寫的,歡迎閱讀交流~
前端設計模式(0)物件導向&&設計原則
前端設計模式(1)--工廠模式
前端設計模式(2)--單例模式
前端設計模式(3)--介面卡模式
前端設計模式(4)--裝飾器模式
前端設計模式(5)--代理模式
前端設計模式(6)--外觀模式&&觀察者模式
前端設計模式(7)--狀態和策略模式
前端設計模式(8)--原型模式
...
什麼是物件導向
把客觀物件抽象成屬性資料和對資料的相關操作,把內部細節和不想關的資訊隱藏起來,把同一個型別的客觀物件的屬性資料和操作繫結在一起,封裝成類,並且允許分成不同層次進行抽象,通過繼承實現屬性和操作的共享,來,前端設計模式我們從物件導向開始。
- 物件導向的分析 OOA
- 物件導向的設計 OOD
- 物件導向的程式設計 OOP
繼承
/**
* 類 物件(例項)
* 父類Animal是公共的
*/
class Animal {
constructor (name) {
this.name = name
}
eat () {
console.log(`${this.name}eat`)
}
}
let animal = new Animal('動物')
animal.eat()
/**
* 繼承
* 子類繼承父類
* 繼承可以把公共的方法抽離出來,提高複用,減少冗餘
*/
class Animal {
constructor (name) {
this.name = name
}
eat () {
console.log(`${this.name}eat`)
}
}
class Cat extends Animal {
constructor (myname, age) {
super(myname)
this.age = age
}
speak () {
console.log(`${this.name}:喵喵~`)
}
}
let cat = new Cat('小花貓', 0)
cat.eat ()
cat.speak ()
複製程式碼
封裝
這裡說明一下, 把資料封裝起來 減少耦合,不該外部訪問的不要讓外部訪問 利於資料的介面許可權管理 ES6 目前不支援,一般認為_開頭的都會私有的,不要使用,後面講的會使用ts,有不瞭解的童鞋可以去官網看看,2分鐘入門
class Animal2 {
public name // 公共的,類內或者類外都可以訪問,比如:你的名字誰都可以知道
protected age // 收保護的自己和自己的子類可以訪問,比如:女性的年齡
private monney // 只有自己可以知道哦,私房錢嘛
constructor (name, age, monney) {
this.name = name
this.age = age
this.monney = monney
}
}
class Person2 extends Animal2 {
private card;
constructor(name,age,monney,card) {
super(name, age, monney)
this.card=card;
}
getName() {
console.log(this.name);
}
getAge() {
console.log(this.age);
}
getWeight() {
console.log(this.monney); // [ts] 屬性“monney”為私有屬性,只能在類“Animal2”中
}
}
let person = new Person2('dafei', 18, '100000', '金卡')
複製程式碼
多型
同一個介面可以不同實現
保持子類的開放性和靈活性
面向介面程式設計
class Animal {
public name;
protected age;
private weight;
constructor(name,age,weight) {
this.name=name;
this.age=age;
this.weight=weight;
}
}
class Person extends Animal {
private money;
constructor(name,age,weight,money) {
super(name,age,weight);
this.money=money;
}
speak() {
console.log('你好!');
}
}
class Dog extends Animal {
private money;
constructor(name,age,weight) {
super(name,age,weight);
}
speak() {
console.log('汪汪汪!');
}
}
let p=new Person('dafei',10,10,10);
p.speak();
let d=new Dog('dafei',10,10);
d.speak();
複製程式碼
設計原則
單一職責原則
- Single responsibility principle
- 一個程式只做好一件事
- 如果功能特別複雜就進行拆分
開放封閉原則
- Open Closed Principle
- 對擴充套件開放,對修改關閉
- 增加需求時,擴充套件新程式碼,而非修改已有程式碼
- 這是軟體設計的終極目標
function parseJSON(response) {
return response.json();
}
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response;
}
const error = new Error(response.statusText);
error.response = response;
throw error;
}
export default function request(url, options) {
return fetch(url, options)
.then(checkStatus)
.then(parseJSON)
.then(data=>{data})
.catch(err => ({ err }));
}
複製程式碼
單一職責原則
- Single responsibility principle
- 一個程式只做好一件事
- 如果功能特別複雜就進行拆分
其它原則
還有L 里氏替換原則、I 介面隔離原則、D 依賴倒置原則,JS使用比較少。
下一遍我們開始來一起學習,工廠模式