标签:
我国有句说是这样说的“自己动手,丰衣足食”;
哪么下面我们就来看一个自给自足的示例:
class Mainphone
{
public static Assemlb getAssemlb(string type)
{
Assemlb assemlb=null;
if(type=="手机1号")
{
assemlb=new phone1();
}
else if(type.Equals("手机2号"))
{
assemlb =new phone2();
}
return assemlb;
}
static void Main(sting []args)
{
//A:我要一台手机1号
//B:自己组装去
Assemlb assemlb=getAssemlb("手机1号");
assemlb.prind();
//A:我还要一台手机2号
//B:好,自己组装
Assemlb assemlb=getAssemlb("手机2号");
assemlb.prind();
Console.Read();
}
}
public class Assemlb//组装类
{
public abstract void prind();
}
public class phone1:Assemlb
{
public override void prind()
{
Console.WriteLine("手机1号组装完成");
}
}
public class phone2:Assemlb
{
public override void prind()
{
Console.WriteLine("手机2号组装完成");
}
}
确实自给自足多好啊,自己想要什么就自己去制作;但如果我又要一台手机3号呢?自己去学怎么组装,再买材料回来组装。因为所有事情都是自己做的所以程序的耦合度会很高,哪一部手机怎么组装自己都要知道。耦合度高的话对于程序的扩展性会有很大的阻碍,所以我们要进行解耦。简单工厂模式就是解耦的一种形式。
下面我们来看看简单的工厂模式:
class Mainphone
{
static void Main(sting []args)
{
//A:我要一台手机1号
//B:自己组装去
Assemlb assemlb=Assemlbprind.getAssemlb("手机1号");
assemlb.prind();
//A:我还要一台手机2号
//B:好,自己组装
Assemlb assemlb=Assemlbprind.getAssemlb("手机2号");
assemlb.prind();
Console.Read();
}
}
public class Assemlb//组装类
{
public abstract void prind();
}
public class phone1:Assemlb
{
public override void prind()
{
Console.WriteLine("手机1号组装完成");
}
}
public class phone2:Assemlb
{
public override void prind()
{
Console.WriteLine("手机2号组装完成");
}
}
public class Assemlbprind//工厂类
{
Assemlb assemlb=null;
public static Assemlb getAssemlb(string type)
{
if(type=="手机1号")
{
assemlb=new phone1();
}
else if(type=="手机2号")
{
assemlb =new phone2();
}
return assemlb;
}
}
简单工厂模式代码和自给自足的示例代码基本一样,只是把getAssemlb()方法放到了类里面,怎么就进行了解耦了呢?可能有很多人看到这两段代码都会有这样的疑问(我也不例外)。接下来的是我个人的见解有什么不对的请指正:
解耦说白了也就是把工作细分下去,各自负责自己的工作。
把自给自足示例中的getAssemlb()方法拿出来放到工厂类中,同时也把这个方法的工作放到了工厂类;在自给自足的示例中,我们需要每一样东西都要去学会,但在简单工厂模式中就不需要花费这样的时间成本,我想要什么型号的手机我只要去手机店就行了,我完成不用知道我要的手机是怎么组装成的;怎么组装这部手机我们让专业人员去学就OK了。这样不就把工作细分,达到了解耦的目的了吗?
有人会问,如果我手机店关门了不就不能找到我需要的手机了吗?
没错这就是简单工厂模式的缺点,不过在工厂模式中会解决这一缺点(有兴趣的可以去了解下工厂模式,这里讲的是简单工厂模式就不去讲工厂模式了,可能以后会讲到)。
标签:
原文地址:http://www.cnblogs.com/ljhboke/p/5042965.html