马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
栏目总目次
概念
工厂方法模式是一种创建型计划模式,它界说了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中举行。这种模式的告急目标是将对象的创建与利用解耦,使得体系更加机动和可扩展。
脚色
- Product(产物脚色):界说了产物的接口,是工厂方法模式所创建对象的超范例,也就是产物对象的共同父类或接口。
- Concrete Product(详细产物脚色):实现了Product接口的详细类,被详细工厂类所创建。
- Creator(创建者脚色):声明确工厂方法,该方法是一个返回Product范例对象的方法,但返回的Product范例对象是在子类中实现的。通常还提供一个用于创建产物对象的接口。
- Concrete Creator(详细创建者脚色):实现了Creator接口中界说的工厂方法,返回一个Concrete Product实例。
利益
- 解耦:将产物的创建与利用解耦,使得体系更加机动和可扩展。
- 符合开闭原则:新增产物类时,无需修改工厂类代码,只需新增详细产物类和详细工厂类即可。
- 进步机动性:通过子类来决定创建哪个详细产物对象,可以在运行时动态地决定创建哪种产物对象。
应用场景
- 当一个类不知道它所必须创建的对象的类时。
- 当一个类盼望由它的子类来指定它所创建的对象时。
- 当类将创建对象的职责委托给多个资助子类中的某一个,而且你盼望将哪一个资助子类是署理者这一信息局部化时。
示例代码
- // Product 角色
- public interface IDocument
- {
- void Display();
- }
- // Concrete Product 角色
- public class TextDocument : IDocument
- {
- public void Display()
- {
- Console.WriteLine("Displaying Text Document");
- }
- }
- public class PDFDocument : IDocument
- {
- public void Display()
- {
- Console.WriteLine("Displaying PDF Document");
- }
- }
- // Creator 角色
- public interface IDocumentFactory
- {
- IDocument CreateDocument();
- }
- // Concrete Creator 角色
- public class TextDocumentFactory : IDocumentFactory
- {
- public IDocument CreateDocument()
- {
- return new TextDocument();
- }
- }
- public class PDFDocumentFactory : IDocumentFactory
- {
- public IDocument CreateDocument()
- {
- return new PDFDocument();
- }
- }
- // 客户端代码
- class Program
- {
- static void Main(string[] args)
- {
- IDocumentFactory factory1 = new TextDocumentFactory();
- IDocument doc1 = factory1.CreateDocument();
- doc1.Display(); // 输出:Displaying Text Document
- IDocumentFactory factory2 = new PDFDocumentFactory();
- IDocument doc2 = factory2.CreateDocument();
- doc2.Display(); // 输出:Displaying PDF Document
- }
- }
复制代码 总结
工厂方法模式是一种非常有效的创建型计划模式,它通过界说一个创建对象的接口(即工厂接口),但将详细创建对象的任务交给子类去完成。这种模式的告急长处在于它将对象的创建与利用分离,低沉了体系的耦合度,增长了体系的机动性和可扩展性。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |