假设一个导演需要拍一部戏,需要演员和摄影师,导演喊action,工作人员各就各位
// 摄影师
class Photographer {
record() {
console.log('start record')
}
}
// 演员
class Actors {
performance() {
console.log('start performance')
}
}
// 导演
class Director {
action() {
console.log('各部门准备,开始!')
const photographer = new Photographer()
const actors = new Actors()
photographer.record()
actors.performance()
}
}
const director = new Director()
director.action()
现在我需要再加一个灯光师
class LightingEngineer {
openLight() {
console.log('open light')
}
}
class Director {
action() {
console.log('各部门准备,开始!')
const photographer = new Photographer()
const actors = new Actors()
const lightingEngineer = new LightingEngineer()
photographer.record()
actors.performance()
lightingEngineer.openLight()
}
}
const director = new Director()
director.action()
#####后面又需要加道具,声音,副导演等等,然后导演累死了
#####因为每次导演喊开始时都必须对工作人员分配不同任务,这样非常容易出错,导演累死也是必然的.
#####而实际场景中,都是导演喊"工作人与各就各位,action!" 大家就开始了自己的工作. #####经过培训的工作人员都会知道导演喊action 自己需要做什么,所以我们应该怎么修改代码呢?
#####给每个人员添加自己的action方法
class Photographer {
record() {
console.log(‘start record’)
}
action() {
this.record()
}
}
class Actors {
performance() {
console.log(‘start performance’)
}
action() {
this.performance()
}
}
class LightingEngineer {
openLight() {
console.log(‘open light’)
}
action() {
this.openLight()
}
}
// 将工作人员实例当作参数传入action 方法
class Director {
action(members) {
members.map(member => {
member.action()
})
}
cut(){
console.log('cut')
}
}
const director = new Director()
const photographer = new Photographer()
const actors = new Actors()
const lightingEngineer = new LightingEngineer()
director.action([photographer, actors, lightingEngineer])
director.cut()
director.action([photographer, actors])