面试被问到关于设计模式的知识时,可以拣最常用的作答

1)工厂模式:可以消除对象间的耦合,通过使用工程方法而不是new关键字。将所有实例化的代码集中在一个位置,防止代码重复。工厂模式解决了重复实例化的问题 ,但还有一个问题,那就是对象识别问题,因为根本无法 搞清楚他们到底是哪个对象的实例 。

function createPerson(name,age,job){
    let obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.job = job;
    obj.printName = function(){
      console.log(this.name)
    }
    return obj;
}
 
let person1 = createPerson('ke',10,'teacher');
let person2 = createPerson('hua',20,'student');
console.log(person1['name']); //两种形式访问对象的属性
console.log(person1.name);

2)构造函数模式:解决了重复实例化的问题 ,又解决了对象识别的问题,该模式与工厂模式的不同之处在于:

1.构造函数方法没有显示的创建对象 (new Object());
 
2.直接将属性和方法赋值给 this 对象;
 
3.没有 renturn 语句
 
4.调用构造函数的时候使用new关键字
 
function Person(name,age,job){
   this.name = name;
   this.age = age;
   this.job = job;
   this.printName = function(){
      console.log(this.name);
   }
}
 
let person1 = new Person('hua',10,'student');
let person2 = new Person('ke',20,'teacher');

3) 构造器模式+原型模式

定义一筐球,自己设计数据结构,然后能实现不同业务功能

思路:应该是用构造函数+原型链的模式实现封装,在构造函数中定义对象的属性,在函数原型对象 上定义方法

function Balls(){
    this.type = ['red','white','red','white'];
    this.weight = [10,20,30,40];
}
 
//在原型上定义方法,即要实现的业务功能
//找出红球
Balls.prototype.findRedBalls = function(){
  let type = this.type;
  let result = [];
  type.forEach((val)=>{
      if( val==='red' ){
          result.push(val);
      }
  });
}
 
//找出重量大于10的红球
Balls.prototype.findRedAndLarge10Balls = function(){
     let type = this.type;
     let weight = this.weight;
     let result = [];
     type.forEach((val,key)=>{
         if( val === 'red' && weight[key]>10  ){
             result.push(val);
         }
     });
}
 
//可以继续往原型上添加方法,即添加业务功能
  • 代理模式:给一个对象提供一个代理对象,并由代理对象控制原对象的引用。实际开发中,按照使用目的的不同,代理可以分为:远程代理、虚拟代理、保护代理、Cache代理、防火墙代理、同步化代理、智能引用代理

  • 适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起使用的类能够一起工作。

  • 模板方法模式:提供一个抽象类,将部分逻辑以具体方法或构造器的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法(多态实现),从而实现不同的业务逻辑。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值