7in10笔记:泡妞之工厂方法模式
类关系图
类角色说明
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
意图
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中
适用性
1、 当一个类不知道它所必须创建的对象的类的时候。
2、 当一个类希望由它的子类来指定它所创建的对象的时候。
3、 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
泡妞的例子
FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了
泡妞的代码
using System;
using System.Collections;
//抽象产品(Product)角色
public abstract class Hamburger
{
public abstract void OK();
}
//具体产品(Concrete Product)角色
public class ChickenHamburger:Hamburger
{
public override void OK()
{
Console.WriteLine("来了,您的鸡肉汉堡!");
}
}
//具体产品(Concrete Product)角色
public class BeefHamburger:Hamburger
{
public override void OK()
{
Console.WriteLine("类了,您的牛肉汉堡!");
}
}
//抽象工厂(Creator)角色
public abstract class Waiter
{
public abstract Hamburger Create();
}
//具体工厂(Concrete Creator)角色
public class Chef_ChickenHamburger:Waiter
{
public override Hamburger Create()
{
Console.WriteLine("鸡肉汉堡制作中,请稍后……");
return new ChickenHamburger();
}
}
//具体工厂(Concrete Creator)角色
public class Chef_BeefHamburger:Waiter
{
public override Hamburger Create()
{
Console.WriteLine("牛肉汉堡制作中,请稍后……");
return new BeefHamburger();
}
}
public class KFC
{
public static void Main()
{
Waiter waiter=null;
Hamburger hbg=null;
Console.WriteLine("Andy喜欢鸡肉汉堡的!");
waiter=new Chef_ChickenHamburger();
hbg=waiter.Create();
hbg.OK();
Console.WriteLine("Mary喜欢牛肉汉堡的!");
waiter=new Chef_BeefHamburger();
hbg=waiter.Create();
hbg.OK();
}
}
工厂方法模式
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
优缺点
优点:当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。
缺点:通常一个产品对应一个工厂,较为烦琐,而且所有的产品都应该是一类别的,即应该有共同的接口
说明
一个工厂方法模式的实现依赖于工厂角色和产品角色的多态性。在有些情况下,这个模式可以出现退化。
工厂方法返回的类型应当是抽象类型,而不是具体类型。调用工厂方法的客户端应当依赖抽象产品编程,而不是具体产品。如果工厂仅仅返回一个具体产品对象,便违背了工厂方法的用意,发生退化,这时就不再是工厂模式了。
工厂的等级结构:工厂对象应当有一个抽象的超类型。如果等级结构中只有一个具体工厂类的话,抽象工厂就可以省略,发生了退化。
分享到:
相关推荐
泡妞与设计模式
Factory 模式是一种常用的设计模式,它的主要思想是将产品的创建和使用分开,客户端可以通过工厂类来请求某种产品,而不需要知道产品的具体实现细节。Factory 模式的优点是可以降低客户端和产品之间的耦合度,提高...
【描述】:“c#表白泡妞程序(极品)”是用C#编写的一个精心设计的应用,其特点在于代码完整,注释清晰,这使得初学者也能理解程序的工作原理。程序的界面设计得相当美观,符合现代审美,能够吸引使用者的注意力。其...
5. **中文支持**:由于涉及到“中国”和“泡妞”这样的中文词汇,这个源码应该是为中文用户设计的,可能包含中文字符编码、本地化设置等。 6. **数据库设计**:对于任何网站来说,数据库设计都是关键。Access数据库...
易语言泡妞
在这个名为“程序员表白,泡妞神器”的项目中,HTML5成为了程序员们向心上人展示浪漫与技术实力的工具。这个“动态爱情树”和“打字效果”都是HTML5特性巧妙运用的典范。 首先,我们来看看“动态爱情树”。在HTML5...
中英文杂糅,跟 别笑我是单词书 类似。比较轻松的读物。记单词,学泡妞技巧 一举两得
办公室泡妞攻略 怎么追同事-.doc
标题“泡妞利器-那些花儿”虽然寓意有趣,但实际与IT技术关联不大,这里我们将主要关注描述和标签中的信息。描述提到“用了UpdateLayeredWindow不断重绘花朵”,这是Windows API中一种高级的窗口绘制技术,适用于...
软件开发是一项复杂的工程活动,涉及需求分析、设计、编码、测试和维护等多个环节。随着科技的不断进步,软件开发的方法论也在不断发展,从经典的瀑布模型到敏捷开发,再到持续集成/持续部署(CI/CD)的现代实践,每...
很好的js js自动画图 屏幕保护 贪食蛇学习
关注聊天本身,而不是聊天话题很多人都不知道怎么和女孩聊天 往往说着说着就没有了话题 而我认为: 聊天根本就不需要准备话题!
【泡妞秘籍】在21世纪的社交环境中,拓展交际圈成为了提升个人魅力和吸引异性的关键。教育精品资料中的“泡妞秘籍”实际上是对人际交往技巧的深度探讨,尤其是针对男性群体如何建立有效的社交网络以增加与女性接触的...
在移动应用市场中,很多App采用免费下载加内购或订阅的商业模式。用户在使用过程中可能会遇到需要付费解锁的功能或服务。然而,这同时也提醒用户要谨慎对待涉及金钱交易的事项,防止被欺诈。在进行任何充值或激活...
对于想要学习Android开发或对泡妞应用感兴趣的人来说,这份源码提供了一个实际的项目案例,可以从中了解完整的应用开发流程,从需求分析到设计、编码、测试和发布。同时,它也是一个有趣的社交心理学的应用实例,...
注:此软件插入进程来实现桌面下雪的效果 (部分杀毒软件会报毒) 机器配置低的不建议使用此软件 。 此软件为破解版本 禁止用于任何商业途径 。 解压密码为:QQ402519067
首先第一次打开会简单教你几步,最好看看,另外值得一说的是,这个可以做成exe的视频文件,如果你的小女盆友在电脑方面有啥不会的,你用电脑屏幕录制一个教程,发给她,相当于一步一步教她,她每次想起来都会心里...
GRE 单词 泡妞黄宝书 英 语 学 习
标题中的“情人节泡妞利器让屏幕开满鲜花”暗示了一个应用程序,它可能是一个互动的桌面程序或者屏保,设计用于在情人节这样的特殊日子里给另一半带来惊喜。这个软件的特色在于能在屏幕上展示出鲜花盛开的效果,以此...
简单的999躲玫瑰 希望大家喜欢 非原创