0

我想知道是否可以将抽象工厂用作策略,例如嵌套两种模式并将工厂类也称为策略。

我提供了一个例子来说明我的问题。该类ShoppingMall将是上下文类,而PizzaStore将是有问题的抽象工厂,在这种情况下我也将其视为一种策略。

// interface of context class, mostly a wrapper
// uses 3 different strategies
interface ShoppingMall
{
    PizzaStore GetPizzaStore();
    ParkingLot GetParkingLot();
    Adverts GetAdverts();

    void CustomerArrives();
}

// abstract factory & strategy interface?
interface PizzaStore 
{
    Pizza CreatePizzaCheese();
    Pizza CreatePizzaVeggie();
    Pizza CreatePizzaClam();
    Pizza CreatePizzaPepperoni();
}

// strategy interface
interface ParkingLot 
{
    void Pay();
}

// strategy interface   
interface Adverts
{
    void CreateSpam();
}

class PizzaStoreChicago implements PizzaStore {}
class PizzaStoreNY implements PizzaStore {}
class PizzaStoreObjectVille  implements PizzaStore {}

class ParkingLotBig   implements ParkingLot {}
class ParkingLotSmall implements ParkingLot {}
class ParkingLotCheap implements ParkingLot {}

class AdvertsAnnoying implements Adverts {}
class AdvertsBoring implements Adverts {}
class AdvertsStupid implements Adverts {}

class ShoppingMallObjectVille implements ShoppingMall {}
class ShoppingMallJavaRanch implements ShoppingMall {}
class ShoppingMallAverage implements ShoppingMall {}
class ShoppingMallOther implements ShoppingMall {}
4

1 回答 1

2

是的,组合一个以上的设计模式来解决问题并没有什么坏处。从您的设计中,我可以看到以下问题:

该接口PizzaStore不应该包含所有这些创建方法,因为它没有真正意义(您正在强制所有比萨店实现所有这些方法,如果比萨店只生产素食比萨怎么办?)。策略模式表示您必须以多种不同的方式实现一种方法或抽象算法。这将使您能够灵活地在运行时切换算法和策略。

“PizzaStore”应该看起来像这样:

interface PizzaStore 
{
    Pizza CreatePizza();
}

然后所有PizzaStore实现都应该实现一个CreatePizza方法,该方法将返回一个Pizza应该是抽象类或接口的方法。的实现/扩展Pizza应该是:PizzaCheese, PizzaVeggie, PizzaClam,PizzaPepperoni

于 2012-07-11T07:53:38.133 回答