陆.1.2 接口隔离原则
01.什么是接口隔离原则
02.举例说明
//state为几何体的状态参数集合,是一个json对象
const shapeInterface = (state) => ({
type: 'shapeInterface',//接口名
area: () => state.area(state),//计算面积
volume: () => state.volume(state)//计算体积
})最后更新于
这有帮助吗?
//state为几何体的状态参数集合,是一个json对象
const shapeInterface = (state) => ({
type: 'shapeInterface',//接口名
area: () => state.area(state),//计算面积
volume: () => state.volume(state)//计算体积
})最后更新于
这有帮助吗?
这有帮助吗?
//定义计算面积的接口
const shapeInterface = (state) => ({
type: 'shapeInterface',
area: () => state.area(state)
})
//定义计算体积的接口
const solidShapeInterface = (state) => ({
type: 'solidShapeInterface',
volume: () => state.volume(state)
})
//定义一个立方体
const cubo = (length) => {
//state
const proto = {
//属性
type : 'Cubo',
length,
//方法
area : (args) => Math.pow(args.length, 2) * 6,
volume : (args) => Math.pow(args.length, 3)
}
const basics = shapeInterface(proto) //实现计算面积的接口
const complex = solidShapeInterface(proto)//实现计算体积的接口
//利用Object.assign组合出一个新的类,这个类实现了上面2种接口
const composite = Object.assign({}, basics, complex)
//最后传入参数,返回新的类的实例
return Object.assign(Object.create(composite), {length})
}const manageShapeInterface = (fn) => ({
type: 'manageShapeInterface',
calculate: () => fn()
})
//平面圆
const circle = (radius) => {
const proto = {
radius,
type: 'Circle',
area: (args) => Math.PI * Math.pow(args.radius, 2)
}
const basics = shapeInterface(proto)
const abstraccion = manageShapeInterface(() => basics.area())
const composite = Object.assign({}, basics, abstraccion)
return Object.assign(Object.create(composite), {radius})
}
//立方体
const cubo = (length) => {
const proto = {
length,
type : 'Cubo',
area : (args) => Math.pow(args.length, 2) * 6,
volume : (args) => Math.pow(args.length, 3)
}
const basics = shapeInterface(proto)
const complex = solidShapeInterface(proto)
//关键语句,传入一个函数,让该函数实现具体的逻辑
const abstraccion = manageShapeInterface(
() => basics.area() + complex.volume()
)
const composite = Object.assign({}, basics, abstraccion)
return Object.assign(Object.create(composite), {length})
}