文章目录
前言
在学习如何使用创建型设计模式更好的封装代码、更好的创建对象之前,先了解一下封装与对象。
一、封装
1. 封装目的
1. 定义变量不会污染外部;
2. 能够作为一个模块调用(项目/程序 = 模块 + 沟通);
3. 遵循开闭原则(开闭原则就是建立在封装的基础上的);
2. 什么是好的封装?
1. 变量外部不可见;
2. 调用接口使用;
3. 流出拓展接口;
3. 封装对象时的设计模式
1. 创建一个对象的模式
1. 工厂模式
目的:方便我们大量创建对象(例如:弹窗);
应用场景:当某一个对象需要经常创建的时候;
2. 建造者模式
目的:需要组合出一个全局对象(例如:轮播图);
应用场景:当要创建单个、庞大的组合对象时‘
2. 保障对象只有一个
1. 单例模式
目的:需要确保全局只有一个对象;
应用场景:为了避免重复新建,避免多个对象存在互相干扰。
二、基本结构
1. 工厂模式的基本结构
工厂模式就是写一个方法,只需调用这个方法,就能拿到你要的对象。
function Tactory(type) {
switch(type) {
case 'type1':
return new Type1();
case 'type2':
return new Type2();
case 'type3':
return new Type3();
}
}
2. 建造者模式的基本结构
把一个复杂类的各个部分,拆分成独立的类,然后再在最终类里组合到一块,最后为最终给出去的类。
// 模块1
function Mode1() {
}
// 模块2
function Mode2() {
}
// 最终使用的类
function Final() {
this.mode1 = new Mode1();
this.mode2 = new Mode2();
}
3. 单例模式的基本结构
通过定义一个方法,使用时只允许通过此方法拿到存在内部的同一实例化对象。
let SingLeton = function(name) {
this.name = name;
}
SingLeton.getInstance = function(name) {
if(this.instance) {
return this.instance;
}
return this.instance = new SingLeton(name);
}
三、应用示例
1. 工厂模式的示例
// 1.多彩的弹窗
// 需求:项目有一个弹窗需求,弹窗有多种,他们之间存在内容和颜色上的差异。
function infoPop() {
//消息
}
function confirmPop() {
//确认
}
function cancelPop() {
//关闭
}
// 创建3个消息弹窗,3个确认,3个取消,分别有不同的颜色
new infoPop('hello1'