设计模式示例三 Abstract Factory(抽象工厂)

<script type="text/javascript"><!-- google_ad_client = "pub-0241434510974184"; /* auto-http.cn 右边 ,468x60 */ google_ad_slot = "0902256228"; google_ad_width = 468; google_ad_height = 60; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

示例名称:家庭合唱比赛
示例说明:定义抽象的父亲(AbstractFather)、母亲(Abstractmother)和孩子(AbstractChild)及抽象行为Sing。定义抽象的家庭(AbstractFamily),包含父亲母亲孩子行为有初始化成员(ConstructMember),准备(抽象的GetReadyToSing),合唱(Tutti),谢幕(抽象的Thank)。定义抽象的家庭工厂负责创建父亲母亲孩子
定义家庭A(FamilyA)、父亲A(FatherA)、母亲A(MotherA)、和孩子A(ChildA)及家庭工厂A(FactoryA)分别继承自家庭父亲母亲孩子家庭工厂

示例类图:
设计模式示例三 Abstract Factory(抽象工厂)
关键部分说明

家庭父亲母亲孩子家庭工厂

设计模式示例三 Abstract Factory(抽象工厂)//抽象的家庭
设计模式示例三 Abstract Factory(抽象工厂)
abstractclassAbstractFamily
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
//家庭成员
设计模式示例三 Abstract Factory(抽象工厂)
protectedAbstractFatherfarther;
设计模式示例三 Abstract Factory(抽象工厂)
protectedAbstractmothermother;
设计模式示例三 Abstract Factory(抽象工厂)
protectedAbstractChildchild;
设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//创建家庭成员
设计模式示例三 Abstract Factory(抽象工厂)
publicvoidConstructMember(AbstractFamilyFactoryfactory)
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)farther
=factory.CreateFather();
设计模式示例三 Abstract Factory(抽象工厂)mother
=factory.CreateMother();
设计模式示例三 Abstract Factory(抽象工厂)child
=factory.CreateChild();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//合唱准备工作
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicvoidGetReadyToSing();
设计模式示例三 Abstract Factory(抽象工厂)
//谢幕
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicvoidThanks();
设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//合唱
设计模式示例三 Abstract Factory(抽象工厂)
publicvoidTutti()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
if(farther!=null)farther.Sing();
设计模式示例三 Abstract Factory(抽象工厂)
if(mother!=null)mother.Sing();
设计模式示例三 Abstract Factory(抽象工厂)
if(child!=null)child.Sing();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//抽象父亲
设计模式示例三 Abstract Factory(抽象工厂)
abstractclassAbstractFather
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicvoidSing();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//抽象母亲
设计模式示例三 Abstract Factory(抽象工厂)
abstractclassAbstractmother
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicvoidSing();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//抽象孩子
设计模式示例三 Abstract Factory(抽象工厂)
abstractclassAbstractChild
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicvoidSing();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
//抽象家庭工厂
设计模式示例三 Abstract Factory(抽象工厂)
abstractclassAbstractFamilyFactory
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicAbstractFatherCreateFather();
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicAbstractmotherCreateMother();
设计模式示例三 Abstract Factory(抽象工厂)
abstractpublicAbstractChildCreateChild();
设计模式示例三 Abstract Factory(抽象工厂)}

关键在于这个抽象的家庭(AbstractFamily),它的行为合唱(Tutti)包装了基于通过抽象的家庭工厂(AbstractFamilyFactory)创建的家庭成员的行为。

家庭A
设计模式示例三 Abstract Factory(抽象工厂)classFamilyA:AbstractFamily
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
publicFactoryAfactory=newFactoryA();
设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
publicoverridevoidGetReadyToSing()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)Console.WriteLine(
"我们是幸运家庭A,我们已经做好了上台的准备!");
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
publicoverridevoidThanks()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)Console.WriteLine(
"我们是幸运家庭A,我们的演出结束,谢谢大家!");
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
classFatherA:AbstractFather
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
publicoverridevoidSing()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)Console.WriteLine(
"我是父亲,我唱男高音!");
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
classMotherA:Abstractmother
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
publicoverridevoidSing()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)Console.WriteLine(
"我是母亲,我唱民歌");
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
classChildA:AbstractChild
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
publicoverridevoidSing()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)Console.WriteLine(
"我是孩子,我唱儿童歌曲!");
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
设计模式示例三 Abstract Factory(抽象工厂)
classFactoryA:AbstractFamilyFactory
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
publicoverrideAbstractFatherCreateFather()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
returnnewFatherA();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
publicoverrideAbstractmotherCreateMother()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
returnnewMotherA();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)
publicoverrideAbstractChildCreateChild()
设计模式示例三 Abstract Factory(抽象工厂)设计模式示例三 Abstract Factory(抽象工厂)
...{
设计模式示例三 Abstract Factory(抽象工厂)
returnnewChildA();
设计模式示例三 Abstract Factory(抽象工厂)}

设计模式示例三 Abstract Factory(抽象工厂)}

通过对对应的抽象类的继承实现了和抽象类相同的创建、组织和表示。

调用及运行结果

设计模式示例三 Abstract Factory(抽象工厂)FamilyAfamily=newFamilyA();
设计模式示例三 Abstract Factory(抽象工厂)family.ConstructMember(family.factory);
设计模式示例三 Abstract Factory(抽象工厂)family.GetReadyToSing();
设计模式示例三 Abstract Factory(抽象工厂)family.Tutti();
设计模式示例三 Abstract Factory(抽象工厂)family.Thanks();

设计模式示例三 Abstract Factory(抽象工厂)