大话设计模式

《大话设计模式》

第90章

上一页 封面 下一页

大B:“我就以咖啡外卖店写几个java类来描述说明Flyweight设计模式的实现方式吧。”

客户买咖啡下订单,订单只区分咖啡口味,如果下了1W个订单,而咖啡店只卖20种口味的咖啡,那么我们就没有必要生成1W个订单对象,通过享元模式我们只需要生成20个订单对象。

这个例子举的不太好,但足以说明问题。下面是具体的代码。

1、订单抽象类

2、订单实现类

3、订单生成工厂

4、客户类、带有main方法的测试类

……1、

packageflyweight;

publicabstractclassOrder{

//执行卖出动作

publicabstractvoidsell;

//获取咖啡口味

publicabstractStringgetFlavor;

……1end

……2、

packageflyweight;

publicclassFlavorOrderextendsOrder{

privateStringflavor;

publicFlavorOrder(Stringflavor){

=flavor;

publicStringgetFlavor{

publicvoidsell{

(“卖出一杯[”+flavor+“]。”);

……2end

……3、

packageflyweight;

publicclassFlavorFactory{

//订单池

privateMap《String,Order》flavorPool=newHashMap《String,Order》(20);

//静态工厂,负责生成订单对象

privatestaticFlavorFactoryflavorFactory=newFlavorFactory;

privateFlavorFactory{}

publicstaticFlavorFactorygetInstance{

returnflavorFactory;www.smrhm.com 幻想小说网

//获得订单

publicOrdergetOrder(Stringflavor){

Orderorder=null;

if((flavor)){

order=(flavor);

}else{

//获得新口味订单

order=newFlavorOrder(flavor);

//放入对象池

(flavor,order);

returnorder;

//获得已经卖出的咖啡全部口味数量

publicintgetTotalFlavorsMade{

……3end

……4、

packageflyweight;

publicclassClient{

//客户下的订单

privatestaticList《Order》orders=newArrayList《Order》(100);

//订单对象生成工厂

privatestaticFlavorFactoryflavorFactory;

//增加订单

privatestaticvoidtakeOrders(Stringflavor){

((flavor));

publicstaticvoidmain(Stringargs){

//订单生成工厂

flavorFactory=;

//增加订单

takeOrders(“摩卡”);

takeOrders(“卡布奇诺”);

takeOrders(“香草星冰乐”);

takeOrders(“香草星冰乐”);

takeOrders(“拿铁”);

takeOrders(“卡布奇诺”);

takeOrders(“拿铁”);

takeOrders(“卡布奇诺”);

takeOrders(“摩卡”);

takeOrders(“香草星冰乐”);

takeOrders(“卡布奇诺”);

takeOrders(“摩卡”);

takeOrders(“香草星冰乐”);

takeOrders(“拿铁”);

takeOrders(“拿铁”);

//卖咖啡

for(Orderorder:orders){

//打印生成的订单java对象数量

(“\n客户一共买了”++“杯咖啡!”);

//打印生成的订单java对象数量

(“\n共生成了”++“个FlavorOrderjava对象!”);

阅读大话设计模式最新章节 请关注米妮小说网(www.qixinyuan.com.cn)

上一页 目录 下一页 存书签

热门推荐