- N +

设计模式之抽象工厂模式

设计模式之抽象工厂模式原标题:设计模式之抽象工厂模式

导读:

什么是抽象工厂模式?抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型...

文章目录 [+]

什么是抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。


在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

抽象工厂模式使用场景

在生活中,我们经常去餐馆吃饭。比如,我们愿意吃鸡腿配上可乐,喜欢吃盖饭配蛋花汤。我们不关心鸡腿怎么做的,可乐怎么生产的,盖饭怎么炒的,而只关心我们吃什么,喝什么,我们只需要指定想要的搭配就可以了,这就是典型的抽象工厂。 后面会代码举例这个抽象工厂模式场景。


总结抽象工厂使用场景:

 1 系统独立于它的产品创建、组合和表示。即无需关心内部对象时如何创建的,怎么创建的,什么含义。

 2 系统需要多个产品组合中的一个配置。由于对象很多,能够组合出的组合非常多,而系统只是使用某一个组合。

 3 强调的对象的组合结果,而不是他们具体的接口和实现。

抽象工厂模式意图

提供对象的使用接口,隐藏对象的创建过程。

抽象工厂模式角色

AbstractFactory?提供创建对象的接口。

ConcreteFactory?提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。

AbstractProduct?提供对象的使用接口。

ConcreteProduct?提供真正的适用对象,隐藏该对象的创建过程,是工厂创建的对象。

Client?使用者,通过抽象工厂接口,使用不同的具体工厂方法创建对象组合,从而直接使用对象,无需关注对象的创建过程。

抽象工厂模式代码举例

抽象接口定义:

//抽象工厂-提供创建对象接口----主食+饮品?的抽象接口
public?interface?EatFacotry?{
????
?????public?StapleFood?MakeStapleFood();
????????
?????
?????public?Drinks?MakeDrinks();

}

//主食接口--提供对象的使用接口
interface??StapleFood{
????
?????public?void?eating();
}


//饮用接口--提供对象的使用接口
interface??Drinks{
????
?????public?void?drinking();
????
}

创建真实的对象 工厂会隐藏他们的创建过程,就像我们只想吃 鸡腿+可乐 而不关系他们的制作过程一样:

//创建主食--鸡腿
class?Drumsticks?implements?StapleFood{

????public?void?eating()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("主食吃?鸡腿?鸡腿??鸡腿");
????}
????
}

//创建主食--盖饭
class?Rice?implements?StapleFood{

????public?void?eating()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("主食吃?盖饭?盖饭?盖饭");
????}
????
}


//创建主饮品--可乐
class?Cola?implements?Drinks{

????public?void?drinking()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("可乐?可乐??可乐?可乐");
????}

????
????
}

//创建主饮品--鸡蛋汤
class?EggdropSoup?implements?Drinks{

????public?void?drinking()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("?鸡蛋汤?鸡蛋汤?鸡蛋汤?鸡蛋汤");
????}
????
}

提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。? 创建 鸡腿+可乐

class?ConcreteFactory1?implements?EatFacotry{

????//创建?主食?鸡腿
????public?StapleFood?MakeStapleFood()?{
????????//?TODO?Auto-generated?method?stub
????????return?new?Drumsticks();
????}

????//创建?饮品??可乐
????public?Drinks?MakeDrinks()?{
????????//?TODO?Auto-generated?method?stub
????????return?new?Cola();
????}
}
//提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。??创建?盖饭+鸡蛋汤
class?ConcreteFactory2?implements?EatFacotry{

????public?StapleFood?MakeStapleFood()?{
????????//?TODO?Auto-generated?method?stub
????????return?new?Rice();
????}

????public?Drinks?MakeDrinks()?{
????????//?TODO?Auto-generated?method?stub
????????return?new?EggdropSoup();
????}

?

}

下面看下如何使用

public?static?void?main(String[]?args)?{

????????//---------------鸡腿+可乐---------------
????????
????????EatFacotry?eat1?=new??ConcreteFactory2();
????????
????????eat1.MakeStapleFood().eating();
????????
????????eat1.MakeDrinks().drinking();

????}

这就是一个简单的抽象工厂的使用。


本文标题:设计模式之抽象工厂模式
本文链接:http://www.kyjszj.com/wdzl/10.html
作者授权:除特别说明外,本文由?开源技术之家?原创编译并授权?开源技术之家?刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共701人参与)参与讨论

    还没有评论,来说两句吧...