23种设计模式背景:
23种设计模式 是前人大佬们的经验。是研究类本身或者类与类之间的协作模式,是进行抽象归纳的
一个很好的速成思路,是教我们怎么设计代码,属于代码设计范畴,做任何事情都是有原则的,写代
码也一样,如果自己心中做的事情没有准则,那就和无头苍蝇一样,做与不做是一样的,写代码和写
好代码是不一样的,如果要写好的代码,考虑的问题更多了,考虑稳定性,扩展性和耦合性,当然也
要考虑上游和下游关联的问题,让你做事的时候怎么做,也知道为什么这么做,这就是学习设计模式
带来的好处
1.工厂方法模式的介绍
1. 应用
在软件系统的构建过程中,经常面临着"某个对象"的创建工作:由于新增需求或者需求变
. 更,这个对象的具体实现面临着巨大的变化?如何提供一种“封装机制” 来隔离出 这个异变对象的变
化,从而保持系统中 其它依赖对象的对象,不随着需求的改变而改变
2 .原理
简单工厂模式:建立一个实例化对象的类,在该类中对多个对象实例化
工厂方法模式:是定义了一个创建对象的抽象方法,由子类决定要实例化的类,这样做的好处是再有
新的类型的对象需要实例化只要增加子类就好
抽象工厂模式:定义了一个接口用于创建对象族,而无需明确指定具体类,冲向工厂也是把对象的实
例化交给子类,支持扩展,同时提供给客户端接口,避免了用户直接操作子类工厂
3 .特点
工厂方法模式主要用于隔离对象的使用者和具体类型之间的耦合关系,面对一个经常变化的具体类
型,紧耦合关系会导致软件的脆弱。工厂方法模式通过面向对象的手法,将所要创建具体对象工作延
迟到子类,从而实现一种扩展(而非更改的策略),较好的解决了这种紧耦合的关系。工厂方法模式
解决 单个对象的需求变化;抽象工厂模式解决 系列对象的需求变化;简单工厂模式解决 对象部分的
需求变化。
2.工厂方法模式的代码实现
#region 工厂方法模式
public class AbstractClass
{
/// <summary>
/// 食品抽象类
/// </summary>
public abstract class Food
{
public abstract void Eat();
}
/// <summary>
/// 苹果
/// </summary>
public class Apple : Food
{
public override void Eat()
{
Console.WriteLine("开始吃苹果了");
}
}
/// <summary>
/// 草莓
/// </summary>
public class Strawberry : Food
{
public override void Eat()
{
Console.WriteLine("开始吃草莓了");
}
}
}
#endregion
#region 抽象工厂方法
/// <summary>
/// 抽象工厂方法
/// </summary>
public abstract class Factory
{
public abstract Food Creatfood();
}
/// <summary>
/// 苹果工厂类
/// </summary>
public class AppleFactory : Factory
{
/// <summary>
/// 负责创建吃苹果
/// </summary>
/// <returns></returns>
public override Food Creatfood()
{
return new Apple();
}
}
/// <summary>
/// 草莓工厂类
/// </summary>
public class StrawBerrysFactory : Factory
{
/// <summary>
/// /负责创建吃草莓
/// </summary>
/// <returns></returns>
public override Food Creatfood()
{
return new Strawberry();
}
}
#endregion
public class Client
{
/// <summary>
/// 调用工厂类
/// </summary>
public static void Task()
{
Factory StrawBerrysFactory = new StrawBerrysFactory();
Food strawberrys = StrawBerrysFactory.Creatfood();
strawberrys.Eat();
Console.Read();
}
}
3.工厂方法模式的优点:
(1)、 在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需
要具体产品类的类名。
(2)、在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工
厂进行任何修改,很好地符合了“开闭原则”。
4.工厂方法模式的缺点:
(1)、每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍
增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
5.工厂方法模式使用的场景:
(1)、一个类不知道它所需要的对象的类。在工厂方法模式中,我们不需要具体产品的类名,我们
只需要知道创建它的具体工厂即可。
(2)、一个类通过其子类来指定创建那个对象。在工厂方法模式中,对于抽象工厂类只需要提供一
个创建产品的接口,而由其子类来确定具体要创建的对象,在程序运行时,子类对象将覆盖父类对
象,从而使得系统更容易扩展。
(3)、将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个
工厂子类创建产品子类,需要时再动态指定。
6.总结
每种模式都有自己的使用场合,切记,如果使用错误,还不如不用。工厂方法模式通过面向对象编
程中的多态性来将对象的创建延迟到具体工厂中,从而解决了简单工厂模式中存在的问题,也很好地
符合了开放封闭原则(即对扩展开发,对修改封闭)。
学习设计模式我们一定要谨记设计模式的几大原则,否则是徒劳无功的。就像学务工一样,我们要记
心法。6大原则就像孤独求败的独孤九剑的剑诀,学会了,变化无穷。
天下国家,可均也;爵禄,可辞也;白刃,可蹈也;中庸不可能也