浅谈设计模式2

简单工厂模式

简单工厂模式并不属于GoF的23种经典设计模式,但通常将它作为学习其他工厂模式的基础。


下面我们通过一个类图来简单的认识一下简单工厂模式

浅谈设计模式2

简单工厂模式

代码实现

Product

public interface Product

{

void sayName();

}

ProductA

class ProductA : Product

{

public void sayName()

{

Console.WriteLine("我是A");

}

}

ProductB

class ProductB : Product

{

public void sayName()

{

Console.WriteLine("我是B");

}

}

ProductFactory

public class ProductFactory

{

public static Product getProductFactory(string name)

{

switch (name)

{

case "A": {

return new ProductA();

} break;

case "B": {

return new ProductB();

} break;

default:

{

return null;

}break;

}

}

}

使用方法

Product a = ProductFactory.getProductFactory("A");

a.sayName();

效果

浅谈设计模式2

效果图

过程解析

从上面的类图和代码可以看出,在简单工厂模式中,我们可以抽取出三类角色:

  1. 抽象产品接口

  2. 产品的实体类

  3. 产品工厂类

抽象产品接口(Product):将产品的共同特征抽象出来的一个接口,作为工厂类的创建方法的返回值,同时,各个产品实体类同样需要实现这个接口;

产品实体类(ProductA):具体的产品实体类,是工厂的创建目标;

产品工厂类(ProductFactory):

简单工厂模式的核心,负责实现创建实体类的具体业务逻辑,由外部调用创建所需要的实体类对象。

简单工厂模式的适用环境

  1. 工厂类负责创建的对象较少

  2. 外部(客户端)只需要知道需要传入的参数,并不需要关心如何创建该对象


工厂方法模式

工厂方法模式是简单工厂模式的延伸,下面,我们同样通过一个类图来先了解一下工厂方法模式

浅谈设计模式2

工厂方法模式

代码实现

Product

public interface Product

{

void sayName();

}

ProductA

class ProductA : Product

{

public void sayName()

{

Console.WriteLine("我是A");

}

}

ProductB

class ProductB : Product

{

public void sayName()

{

Console.WriteLine("我是B");

}

}

Factory

public interface Factory

{

Product getProduct();

}

ProductFactoryA

class ProductFactoryA : Factory

{

public Product getProduct()

{

return new ProductA();

}

}

ProductFactoryB

class ProductFactoryB : Factory

{

public Product getProduct()

{

return new ProductB();

}

}

调用

Factory a = new ProductFactoryA();

Product product = a.getProduct();

product.sayName();

效果

浅谈设计模式2

工厂方法模式效果图

过程解析

工厂方法模式相较于简单工厂模式而言,从代码量上看似乎更为复杂,但在下面这样的情况中,工厂方法模式会更具优势:

如果在现有A,B两种产品的情况下,需要增加C这个产品

那么在简单工厂模式下,我们不仅需要增加一个产品类,还需要修改工厂类中getProduct方法的业务逻辑,那么这样的修改就会动到我们的源代码;

如果使用工厂方法模式的话,就只需要增加一个产品类和工厂类就可以完成原功能的升级,不需要修改我们原本已经写好的源代码,这样更利于程序的维护。

同样是相当于简单工厂模式来进行分析,工厂方法模式多出了一个角色:

适用环境

  1. 客户端(调用者)不知道他所需要的对象的类

  2. 抽象工厂类通过其子类来指定创建那个对象


最后说几句

这次教程中主要介绍了两种设计模式(简单工厂模式和工厂方法模式),通过这两种模式,大家应该可以看出设计模式的优点。虽说在使用设计模式是有可能会增加程序的代码量,但在维护和升级上而言,使用设计模式会更优。


分享到:


相關文章: