Bridge Pattern (桥模式) 第二篇
之前写过一篇关于桥模式的文章, 点击这里查看总感觉理解不太透彻, 今日又深入了解了一下:
对象是由对象的行为, 和对象的属性2部份组成. 桥模式可以理解为将对象的属性与行为分开, 然后再链接起来.
举个简单的例子, 星巴克的咖啡. 星巴克的咖啡有小杯的, 中杯的, 大杯的. 咖啡的种类有Mocha, Espresso,Cappuccino等.这里先暂时使用3种咖啡.
也就是说, 现在星巴克有
小杯Mocha, 小杯Espresso, 小杯Cappuccino,
中杯Mocha, 中杯Espresso, 大杯Cappuccino,
大杯Mocha, 大杯Espresso, 大杯Cappuccino 共9种组合.
所以, 我可以将杯子抽象出来, 将咖啡的种类抽象出来, 然后让这两个对象相互组合.
首先呢,需要定义一下咖啡的种类.
//这里定义了一个抽象的咖啡的类型的类, 不管什么类型的咖啡,总是要倒出来的. 所以都包含了一个倒咖啡的方法. public abstract class CoffeeType { public abstract void PourCoffee(); } public class CoffeeMocha : CoffeeType { public override void PourCoffee() { Console.WriteLine("这是Mocha咖啡"); } } public class CoffeeEspresso : CoffeeType { public override void PourCoffee() { Console.WriteLine("这是Espresso咖啡"); } } public class CoffeeCappuccino : CoffeeType { public override void PourCoffee() { Console.WriteLine("这是Cappuccino咖啡"); } }
咖啡的类型定义好了, 接下来需要定义的是杯子了.
public abstract class Coffee { CoffeeType coffeeType; public CoffeeType CoffeeImplement { set { this.coffeeType = value; } get { return this.coffeeType; } } public abstract void PourCoffee(); } //小杯 public class MediumCoffee : Coffee { public override void PourCoffee() { CoffeeType coffeeType = this.CoffeeType; coffeeType.PourCoffee(); } } //中杯 public class MediumCoffee : Coffee { public override void PourCoffee() { CoffeeType coffeeImp = this.CoffeeType; coffeeType.PourCoffee(); } } //大杯 public class BigCoffee : Coffee { public override void PourCoffee() { CoffeeType coffeeImp = this.CoffeeType; coffeeType.PourCoffee(); } }
上面的咖啡杯, 和咖啡的种类都已经使用好了. 接下来就可以使用了.
CoffeeType coffeeImp = new CoffeeEspresso(); Coffee coffee = new MediumCoffee(); coffee.CoffeeImplement = coffeeImp; coffee.PourCoffee(); //一杯中杯的Espresso可以喝了~
Recent Comments