学习了外观模式,才发现原来不经义间,自己已经不止一次的用过此模式了。
外观模式强调,外部(客户端)与子系统之间通过一个统一的接口(外观)进行通信。也就说,一个系统中可能包括很多子系统,客户端与其中的任何子系统的通信都通过统一的外观实现,而避免使客户端直接与子系统发生关系。
记得曾经有个项目:数据操作涉及三地三个数据库,也就是说每做一个动作(比如说insert),都要insert到三地去,涉及三个数据库。
记得最初的代码是这样写的:(当时是把三个类写成了一个类中三个方法,为了说明问题,这里分开来写)
{
class Program
{
static void Main(string[] args)
{
DBOpOne one = new DBOpOne();
DBOpTwo two = new DBOpTwo();
DBOpThree three = new DBOpThree();
one.insertSiteOne();
two.insertSiteTwo();
three.insertSiteThree();
Console.Read();
}
}
{
public void insertSiteOne()
{
Console.WriteLine("Insert data into site one ");
}
}
class DBOpTwo
{
public void insertSiteTwo()
{
Console.WriteLine("Insert data into site Two ");
}
}
class DBOpThree
{
public void insertSiteThree()
{
Console.WriteLine("Insert data into site Three ");
}
}
}
后来,由于某些原因,三地中某地不再作业,数据库被撤掉。那么这个系统就要做相应的修改:系统中只要用到数据库作业的地方都要把三地作业换成两地作业(把其中某句注释掉)。郁闷之极~~
根据需求,之后做了一些调整:把三地作业封装再一个类中,而在客户端使用这个封装的类就可以了。如果,需求有变,也只是更改这个封装的类即可(所有的操作都集中在这里了)。现在看来,这个就是外观模式的应用了。
{
class Program
{
static void Main(string[] args)
{
DBOp cDal = new DBOp();
cDal.insertSite();
Console.Read();
}
}
class DBOp
{
public void insertSite()
{
DBOpOne one = new DBOpOne();
DBOpTwo two = new DBOpTwo();
DBOpThree three = new DBOpThree();
one.insertSiteOne();
two.insertSiteTwo();
three.insertSiteThree();
}
}
class DBOpOne
{
public void insertSiteOne()
{
Console.WriteLine("Insert data into site one ");
}
}
class DBOpTwo
{
public void insertSiteTwo()
{
Console.WriteLine("Insert data into site Two ");
}
}
class DBOpThree
{
public void insertSiteThree()
{
Console.WriteLine("Insert data into site Three ");
}
}
}
1.为一个复杂子系统提供一个简单接口。
2.提高子系统的独立性。
3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
学习参考:
http://www.cnblogs.com/Terrylee/archive/2006/03/17/352349.html
http://www.cnblogs.com/zhenyulu/articles/55992.html
大话设计模式:外观模式
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:我读设计模式之外观模式(Facade Pattern) - Python技术站