个人觉得设计模式只是一种设计方式的总结,正如大多数人说的用了不一定就程序很好。好的程序是有标准的:功能性,稳定性,效率性,可维护和可扩展性,以及可读性。把简单的功能写的复杂人人都会,复杂的功能用简单的代码描述出来,却不是个个都行。所以设计模式为我们提供了一种方式和一种标杆。
6.代理模式:书中描述是代理类实现与被代理的类相同的接口,代理类通过合成被代理类,就实现被代理的类的功能,有点象装饰模式,只是装饰强调对原有功能的扩展,而代理强调了隐蔽功能。
Code
interface ISubject
{
void Do();
}
public Class RealSubject:ISubject
{
void Do();
}
public Class Proxy:ISubject
{
private RealSubject realSubject;
public void Do
{
if(realSubject==null)
{
realSubject=new RealSubject();
}
realSubject.Do();
}
}
static void Main(string [] args)
{
Proxy proxy=new Proxy();
proxy.Do();
}
这个让我联想到多层架构中的IDAL,BLL,DALFactory三层,DALFactory实现IDAL定义的接口,而BLL间接实现了IDAL接口中的功能,提供给表现层使用,同时BLL也扩展了其它功能,是不是有点代理的味道。我觉得大多数人看到代理模式就会想到WebService中的代理类的用途。我觉得它可以用在业务类软件中,用来对业务算法进行封闭,然后把算法集中放在一个远程可管理的服务器上。这样不会被使用者或者故意破坏者得知其中的业务细节。
7.工厂模式:讲到工厂模式就得先介绍简单工厂模式,他们应该是算一个系列吧。简单工厂是通过继承同一接口而实现不同对象,例如:
Code
interface ICal
{
void Cal();
}
public class Add:ICal
{
public void Cal(){};
}
public class Sub:ICal
{
public void Cal(){};
}
而其实例化需要通过判断语句实现。
Code
public class CreateInstance
{
public ICal CreateInstance(string opString)
{
switch(opString)
{
case"+":
{
return new Add();
}
case"-":
{
return new Sub();
}
}
}
}
工厂模式就是为了解决其实例化的问题产生的,因为上面的实例化违反了开闭原则,随着需求的增加要不停的增加判断
分支。所以工厂模式就增加了工厂类,这样可以同一类的实例化,同时也对客户端进行统一调用。代码如下:
Code
interface Factory
{
ICal CreateInstance();
}
public class FactoryAdd:Factory
{
public ICal CreateInstance()
{
return new Add();
}
}
public class FacotrySub:Factory
{
public ICal CreateInstance()
{
return new Sub();
}
}
public Class Client()
{
ICal=FacotryAdd.CreateStance();//实例化
ICal.Do();//调用方法
}
这样就实现了对简单工厂的实例化问题的解决。
8.原型模型:主要是通过对于已有对象进行复制,封闭复制细节。.net中主要通过实现System.ICloneable对实例进行的复制,相关技术也就深拷贝和浅拷贝了,用的很少。