外观模式(structural 5)

242 阅读1分钟

2.4 外观模式(facade)

  • 设置一个门面,处理各种事务
var shopFacade = {
	calc: function (price) {
		price = discount(price)
		price = fees(price)
		price += shipping()
		return price
	}
}
function discount(value) {
	return value * 0.9
}
function shipping(value) {
	return 5
}
function fees(value) {
	return value * 1.05
}
module.exports = shopFacade
const expect = require('chai').expect
const shopFacade =  require('../src/structural/facade/facade')

describe('外观模式测试', () => {
	it('购物', () => {
		var result = shopFacade.calc(100)

		expect(result).to.equal(99.5)
	})
})

es6 实现

class ShopFacade {
	constructor(price) {
		this.discount = new Discount()
		this.shipping = new Shipping()
		this.fees = new Fees()
	}
	calc(price) {
		price = this.discount.calc(price)
		price = this.fees.calc(price)
		price += this.shipping.calc()
		return price
	}
}

class Discount {
	calc(value) {
		return value * 0.9
	}
}

class Shipping {
	calc() {
		return 5
	}
}
class Fees {
	calc(value) {
		return value * 1.05
	}
}
export default ShopFacade
const expect = require('chai').expect
import ShopFacade from '../src/structural/facade/facade_es6'

describe('外观模式 es6测试', () => {
	it('购物', () => {
		const shop = new ShopFacade()
		const result = shop.calc(100)

		expect(result).to.equal(99.5)
	})
})