一、概念
- 工厂模式一种创建型设计模式,简单的说就是用来创建对象的。
二、场景
- 如果你不想让某个子系统与较大的那个对象之间形成强耦合,而是想运行时从许多子系统中进行挑选的话,那么工厂模式是一个理想的选择;
- 将new操作简单封装,遇到new的时候就应该考虑是否用工厂模式;
- 需要依赖具体环境创建不同实例,这些实例都有相同的行为,这时候我们可以使用工厂模式,简化实现的过程,同时也可以减少每种对象所需的代码量,有利于消除对象间的耦合,提供更大的灵活性
三、实现
- 新建工厂类,类名:DefaultFactory
using System; namespace 工厂模式 { class DefaultFactory { public IShape GetObject(string flage)=> flage switch { "Rectangle" => new Rectangle(), "Round" => new Round(), "Square"=> new Square() }; } } - 新建矩形类,类名: Rectangle
using System; namespace 工厂模式 { class Rectangle:IShape { public void GetShape() { System.Console.WriteLine("这是矩形"); } } } - 新建圆形类,类名:Round
using System; namespace 工厂模式 { class Round:IShape { public void GetShape() { System.Console.WriteLine("这是圆形"); } } } - 新建正方形类,类名:Square
using System; namespace 工厂模式 { class Square:IShape { public void GetShape() { System.Console.WriteLine("这是正方形"); } } } - 新建接口类,类名:IShape
using System; namespace 工厂模式 { interface IShape { void GetShape(); } } - 启动类,类名:Program
using System; namespace 工厂模式 { class Program { static void Main(string[] args) { DefaultFactory df = new DefaultFactory(); //Rectangle IShape shape= (Rectangle)df.GetObject("Rectangle"); shape.GetShape(); //Round IShape shape1= (Round)df.GetObject("Round"); shape1.GetShape(); //Round IShape shape2= (Square)df.GetObject("Square"); shape2.GetShape(); } } }
四、优缺点
- 优点
- 将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;
- 把初始化实例时的工作放到工厂里进行,使代码更容易维护。
- 缺点
- 违背了开闭原则,一旦新增其他对象逻辑,那就必须修改工厂类。
- 工厂类中集中所有对象的创建,一但该类出现了问题,那么整个系统将会无法使用。
7034

被折叠的 条评论
为什么被折叠?



