`
netxdiy
  • 浏览: 679096 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

设计模式示例三 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)分别继承自家庭父亲母亲孩子家庭工厂

示例类图:

关键部分说明

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

//抽象的家庭
abstractclassAbstractFamily
...{
//家庭成员
protectedAbstractFatherfarther;
protectedAbstractmothermother;
protectedAbstractChildchild;

//创建家庭成员
publicvoidConstructMember(AbstractFamilyFactoryfactory)
...{
farther
=factory.CreateFather();
mother
=factory.CreateMother();
child
=factory.CreateChild();
}


//合唱准备工作
abstractpublicvoidGetReadyToSing();
//谢幕
abstractpublicvoidThanks();

//合唱
publicvoidTutti()
...{
if(farther!=null)farther.Sing();
if(mother!=null)mother.Sing();
if(child!=null)child.Sing();
}

}


//抽象父亲
abstractclassAbstractFather
...{
abstractpublicvoidSing();
}


//抽象母亲
abstractclassAbstractmother
...{
abstractpublicvoidSing();
}


//抽象孩子
abstractclassAbstractChild
...{
abstractpublicvoidSing();
}


//抽象家庭工厂
abstractclassAbstractFamilyFactory
...{
abstractpublicAbstractFatherCreateFather();
abstractpublicAbstractmotherCreateMother();
abstractpublicAbstractChildCreateChild();
}

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

家庭A
classFamilyA:AbstractFamily
...{
publicFactoryAfactory=newFactoryA();

publicoverridevoidGetReadyToSing()
...{
Console.WriteLine(
"我们是幸运家庭A,我们已经做好了上台的准备!");
}


publicoverridevoidThanks()
...{
Console.WriteLine(
"我们是幸运家庭A,我们的演出结束,谢谢大家!");
}

}


classFatherA:AbstractFather
...{
publicoverridevoidSing()
...{
Console.WriteLine(
"我是父亲,我唱男高音!");
}

}


classMotherA:Abstractmother
...{
publicoverridevoidSing()
...{
Console.WriteLine(
"我是母亲,我唱民歌");
}

}


classChildA:AbstractChild
...{
publicoverridevoidSing()
...{
Console.WriteLine(
"我是孩子,我唱儿童歌曲!");
}

}


classFactoryA:AbstractFamilyFactory
...{
publicoverrideAbstractFatherCreateFather()
...{
returnnewFatherA();
}

publicoverrideAbstractmotherCreateMother()
...{
returnnewMotherA();
}

publicoverrideAbstractChildCreateChild()
...{
returnnewChildA();
}

}

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

调用及运行结果

FamilyAfamily=newFamilyA();
family.ConstructMember(family.factory);
family.GetReadyToSing();
family.Tutti();
family.Thanks();

分享到:
评论

相关推荐

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    设计模式举例-抽象工厂模式(有图有真相)

    设计模式举例 抽象工厂模式 代码+用例图 设计模式, 设计模式举例-抽象工厂模式(有图有真相)

    java设计模式,工厂模式(简单工厂、工厂、抽象工厂)示例源码

    java设计模式,工厂模式(简单工厂、工厂、抽象工厂)示例源码 //简单工厂 // ICar car = CarSimpleFactory.create(CarSimpleFactory.UPTYPE); //工厂 AbstractFactory factory = new MidFactory(); ICar car =...

    python 抽象工厂模式(示例)

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

    C#设计模式.PDF

    一、 抽象工厂(Abstract Factory)模式 38 二、 Abstract Factory模式的结构: 39 三、 程序举例: 41 四、 在什么情形下使用抽象工厂模式: 44 五、 抽象工厂的起源 45 六、 Abstract Factory模式在实际系统中的...

    java设计模式示例

    1.工厂方法模式(Factory Method) 将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到具体的子类。大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的...

    C#设计模式大全

    一、 抽象工厂(Abstract Factory)模式 二、 Abstract Factory模式的结构: 三、 程序举例: 四、 在什么情形下使用抽象工厂模式: 五、 抽象工厂的起源 六、 Abstract Factory模式在实际系统中的实现 七、 ...

    研磨设计模式(完整带书签).part2.pdf

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式...

    AbstractFactory.zip

    示例只是简单展示抽象工厂模式的基本用法,有关示例的细节请看:https://blog.csdn.net/ZhangCurie/article/details/104710697

    研磨设计模式(完整带书签).part1.pdf

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式...

    研磨设计模式-part2

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式...

    研磨设计模式-part4

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式...

    研磨设计模式-part3

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式...

    设计模式:可复用面向对象软件的基础--详细书签版

    3.1 abstract factory(抽象工厂)— 对象创建型模式 57 3.2 builder(生成器)—对象创建型 模式 63 3.3 factory method(工厂方法)— 对象创建型模式 70 3.4 prototype(原型)—对象创建型 模式 87 3.5 ...

    研磨设计模式.part3(共4个)

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 ...

    研磨设计模式.part2(共4个)

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 ...

    研磨设计模式.part4(共4个)

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 ...

    研磨设计模式.part1(共4个)

    第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 ...

    DesignPattern.Samples.CSharp:23种面向对象设计模式示例代码(C#实现)

    抽象工厂(Abstract Factory)模式 ⑤设计模式的征途-05。原型(原型)模式 ⑥设计模式的征途-06。建造者(Builder)模式 3.结构型模式 ①设计模式的征途-07。适配器(Adapter)模式 ②设计模式的征途-08。植入...

    二十三种设计模式【PDF版】

    设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这...

Global site tag (gtag.js) - Google Analytics