大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)