设计模式之工厂模式
1, 简单工厂
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类
简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程
不足:
由于工厂本身包括了所有的收费方式,商场是可能经常性的更改打折额度和返利额度,每次维护或扩展收费方法都要改动这个工厂,以致代码需重新编译部署,很麻烦
代码如下:
[csharp]
//现金收费工厂类
class CashFactory
{
public static CashSupercreateCashAccept(string type)
{
CashSuper cs = null;
switch (type)
{
case "正常收费":
cs = new CashNormal();
break;
case "满300返100":
CashReturn cr1 = newCashReturn("300", "100");
cs = cr1;
break;
case "打八折":
CashRebate cr2 = newCashRebate("0.8");
cs = cr2;
break;
}
return cs;
}
2, 工厂方法
工厂方法模式是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
代码如下:
[csharp]
//雷锋工厂
inte易做图ceIFactory
{
leifeng createleifeng();
}
//学雷锋的大学生工厂
classUndergraduateFactory : IFactory
{
public leifeng createleifeng()
{
return new Undergraduate();
}
}
//社区志愿者工厂
classVolunteerFactory : IFactory
{
public leifeng createleifeng()
{
return new Volunteer();
}
}
工厂方法模式:针对每一个对象创建一个工厂
优点:
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。如果需要加功能,本来是该工厂类的,而现在是修改客户端。
3, 抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
代码如下:
[csharp]
//IFactory接口
inte易做图ce IFactory
{
Iuser createUser();
}
//SQLServerFactory类,实现IFactory接口,实例化SQLServerUser
class SQLServerFactory : IFactory
{
public Iuser createUser()
{
return new SQLServerUser();
}
}
//AccessFactory类,实现IFactory接口,实例化AccessUser
class AccessFactory : IFactory
{
public Iuser createUser()
{
return new AccessUser();
}
}<span style="font-family: KaiTi_GB2312; "> </span>
抽象工厂方法:IFactory是一个抽象工厂接口,它里面应该包括所有的产品创建的抽象方法。
优点:
1,易于交换产品系列
2,它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也别具体工厂的实现分离,不会出现在客户端代码中。
补充:软件开发 , Java ,