设计模式之工厂方法

一、工厂方法:简单工厂违背了单一职责原则,而且不利于扩展,于是衍生了工厂方法模式,该模式能很好地解决对扩展开放、对修改关闭的需求。

二、实现思路 :对每一个对象都创建一个对应的工厂类,对对象和工厂类都进行抽象,让上端尽量依赖抽象。

三、代码举例:

设计模式之工厂方法

抽象汽车类Car:

csharp;collapse:true;;gutter:true; namespace FactoryMethod { public abstract class Car { public abstract void Drive(); } }</p> <pre><code> 抽象工厂类Factory: ;collapse:true;;gutter:true;
namespace FactoryMethod
{
public interface Factory
{
Car CreateInstance();
}
}

奔驰汽车类BenChiCar:

csharp;collapse:true;;gutter:true; namespace FactoryMethod { public class BenChiCar:Car { public override void Drive() { Console.WriteLine("奔驰汽车行驶中!"); } } }</p> <pre><code> 宝马汽车类BaomaCar: ;collapse:true;;gutter:true;
namespace FactoryMethod
{
public class BaomaCar : Car
{
public override void Drive()
{
Console.WriteLine("宝马汽车行驶中!");
}
}
}

大众汽车类DazongCar:

csharp;collapse:true;;gutter:true; namespace FactoryMethod { public class DazongCar:Car { public override void Drive() { Console.WriteLine("大众汽车行驶中!"); } } }</p> <pre><code> 奔驰汽车工厂类BenChiFactory: ;collapse:true;;gutter:true;
namespace FactoryMethod
{
public class BenChiFactory : Factory
{
public Car CreateInstance()
{
Console.WriteLine("创建了奔驰汽车!");
return new BenChiCar();
}
}
}

宝马汽车工厂类BaomaFactory:

csharp;collapse:true;;gutter:true; namespace FactoryMethod { public class BaomaFactory : Factory { public Car CreateInstance() { Console.WriteLine("创建了宝马汽车!"); return new BaomaCar(); } } }</p> <pre><code> 大众汽车工厂类DazongFactory: ;collapse:true;;gutter:true;
namespace FactoryMethod
{
public class DazongFactory : Factory
{
public Car CreateInstance()
{
Console.WriteLine("创建了大众汽车!");
return new DazongCar();
}
}
}

客户类:

csharp;collapse:true;;gutter:true;
{
//工厂方法,一个对象对应一个工厂,之所以这么做,是为了将对象的创建逻转移给工厂类(对象的创建有可能很复杂,这样做减少了客户端对创建对象所需的资源的依赖),而且新增对象时不需要修改原来的类,只需增加对象和创建对象的工厂即可,遵循了对扩展开放,对修改关闭的原则。
FactoryMethod.Factory Dazongfac = new FactoryMethod.DazongFactory();
Car Dazong = Dazongfac.CreateInstance();
Dazong.Drive();
FactoryMethod.Factory Benchifac = new FactoryMethod.BenChiFactory();
Car Benchi = Benchifac.CreateInstance();
Benchi.Drive();
FactoryMethod.Factory Baomafac = new FactoryMethod.BaomaFactory();
Car Baoma = Baomafac.CreateInstance();
Baoma.Drive();
Console.ReadKey();
}

运行结果:

设计模式之工厂方法

四、工厂方法的优缺点及应用:把对象创建的逻辑细节交给了工厂类,上端不需要关心创建对象需要的业务逻辑信息,但是增加了代码的复杂度 ;比起简单工厂能更好的进行扩展,需要增加对象时只需要增加一个对象和创建对象的工厂即可,不用修改原来的类,遵循了开闭原则,适用于创建复杂的对象,简单对象的创建没必要使用工厂方法模式。

Original: https://www.cnblogs.com/zqhIndex/p/10280134.html
Author: 我若安好,便是晴天
Title: 设计模式之工厂方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612896/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球