.Net Core 抽象工厂模式

抽象工厂的定义

抽象工厂提供了一个接口, 这个接口可以创建一族相关或依赖的对象而无需指明它们具体的类.

工厂方法和抽象工厂的比较

工厂方法是通过继承来实现创建对象工作的, 而抽象工厂则是通过组合的方法.
工厂方法是让子类来创建对象, 客户只需要知道抽象类, 子类做具体的实现, 解耦.
抽象工厂提供了一个可以创建一族产品的抽象类, 这个类的实现类/子类决定产品是如何产出的, 也是解耦.
抽象工厂的优点是: 可以创建一族相关的产品. 缺点是它的接口比较大, 如果添加了产品需要改接口.
而工厂方法只负责生产一个产品.
抽象工厂也经常使用工厂方法来实现具体的工厂.
而工厂方法也经常使用抽象的创造者, 它来使用子类创建出的具体产品.

.Net Core实现抽象工厂
IGredient.cs
1
2
3
4
5
6
7
namespace AbtractFactoryPattern.Abstractions
{
public interface IGredient
{
string Name { get; }
}
}
ICheese.cs
1
2
3
4
5
6
7
namespace AbtractFactoryPattern.Abstractions
{
public interface ICheese : IGredient
{

}
}
IClams.cs
1
2
3
4
5
6
7
namespace AbtractFactoryPattern.Abstractions
{
public interface IClams : IGredient
{

}
}
IDough.cs
1
2
3
4
5
6
7
namespace AbtractFactoryPattern.Abstractions
{
public interface IDough : IGredient
{

}
}
ISauce.cs
1
2
3
4
5
6
7
namespace AbtractFactoryPattern.Abstractions
{
public interface ISauce : IGredient
{

}
}
IPizzalngredientFactory.cs
1
2
3
4
5
6
7
8
9
10
namespace AbtractFactoryPattern.Abstractions
{
public interface IPizzalngredientFactory
{
IDough CreateDough();
ICheese CreateCheese();
IClams CreateClams();
ISauce CreateSauce();
}
}
PizzaStore.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace AbtractFactoryPattern.Abstractions
{
public abstract class PizzaStore
{
public Pizza OrderPizza(string type)
{
var pizza = CreatePizza(type);
pizza.Prepare();
pizza.Bake();
pizza.Cut();
pizza.Box();
return pizza;
}

protected abstract Pizza CreatePizza(string type);
}
}
Pizza.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace AbtractFactoryPattern.Abstractions
{
public abstract class Pizza
{
public string Name { get; set; }
public IDough Dough { get; protected set; }
public ISauce Sauce { get; protected set; }
public ICheese Cheese { get; protected set; }
public IClams Clams { get; protected set; }

public abstract void Propare();


}
}

.Net Core 抽象工厂模式
http://blog.chcaty.cn/2018/04/16/net-core-chou-xiang-gong-han-mo-shi/
作者
caty
发布于
2018年4月16日
许可协议