策略模式
策略模式
1.策略模式,
定义算法族,分别封装起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户端。
class Duck{
constructor(opts){
this.name = opts.name || "";
this.sex = opts.sex || "";
this.flyBehavi = opts.flyer;
this.swimBehavi = opts.swimer;
}
fly(){
this.flyBehavi.fly();
}
swim(){
this.swimBehavi.swim();
}
}
class Flyer{
fly(){
console.info("i am flyer");
}
}
class Swimer{
swim(){
console.info("i am swimer");
}
}
class NewDuck extends Duck{
constructor(opts){
super(opts);
this.name = opts.name;
}
}
class NoFlyer extends Flyer{
fly(){
console.info("i can not fly");
}
}
let a = new NewDuck({name:"哈哈", flyer:new NoFlyer(), swimer:new Swimer()});
a.fly();
a.swim();
简单来说,就是每次调用对象的方法 do, 都会执行 对象中的对象的方法do,执行时因为多态,会让真正的对象执行do.
好处:
- 类中的行为等变化的东西,可以作为类对象放在类中,类可以随时替换它的行为对象。
- 要定义一个新的行为对象,比如nofly,只需要继承行为fly的,并把它加到鸭子类中即可。
- 这样的好处是显而易见的,如果鸭子有100中飞行方式,100中游泳方式,搭配起来就是1万种组合,而用这种方式只需要实现200个类就可以了。
记住:
基础: 抽象,封装,多态,继承
1.封装变化
2.多用组合,少用继承
3.针对接口编程,不针对实现编程

策略模式是一种设计模式,它将算法族封装起来,允许算法独立于使用它的客户端进行变化。通过对象之间的多态性,策略模式允许在运行时选择不同的算法,例如在鸭子类中,可以灵活地替换飞行和游泳行为。这种模式可以有效地减少大量组合的类数量,只需实现所需的行为对象。核心原则包括封装变化、多用组合少用继承以及针对接口编程。
1236

被折叠的 条评论
为什么被折叠?



