代码改变世界

设计模式之简单工厂模式(SimpleFactory)

2010-01-15 22:16  key_sky  阅读(207)  评论(0编辑  收藏  举报

设计模式主要原则:

单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破会。
开放-封闭原则:软件实体类、模块、函数等等应该可以扩展,但是不可修改。对扩展是开放的(Openfor extensio),对于更改时封闭的(Closed for modification)。完全封闭是不可能的,在编码初期时,假设变化不会发生,当变化发生时,创建抽象类隔离以后发生的同类变化。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
依赖倒转原则:高层模块不应该依赖底层模块,两个都应该依赖对象。抽象不应该依赖细节。细节不应该依赖抽象。也就是说当子类可以替换掉父类,软件的功能单位不受影响时,父类才能真正被服用,而子类也能够在父类的基础上增加新的行为。
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互做声。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

     简单工厂(Simple Factory)根据提供给它的数据,返回几个可能类中的一个类的实例,返回的类通常都有一个公共的父类和公共的方法。

Operation.cs:

代码
using System;
using System.Collections.Generic;
using System.Text;

namespace SimpleFactory
{
class Operation2
{
}
class DesignPattern : BookTotal
{
public override string ReadBook()
{
string book = string.Empty;
book
= "I'm reading DesignPattern";
return book;
}
}
class CSharpStructure : BookTotal
{
public override string ReadBook()
{
string book = string.Empty;
book
= "I'm reading C#.Net";
return book;
}
}
public class OperationFactory
{
public static BookTotal ReadBook(string book)
{
BookTotal oper
= null;
switch (book)
{
case "D":
oper
= new DesignPattern();
break;
case "C":
oper
= new CSharpStructure();
break;
}
return oper;
}
}
}

SFac.cs:

代码
using System;
using System.Collections.Generic;
using System.Text;

namespace SimpleFactory
{
class SFac
{
}
public class BookTotal
{
private string _book;

public string BOOK
{
get { return _book; }
set { _book = value; }
}
public virtual string ReadBook()
{
string ReadBook = string.Empty;
return ReadBook;
}
}
}

Program.cs:

代码
using System;
using System.Collections.Generic;
using System.Text;

/********************************Summary*******************************
*Simple Factory根据提供给它的数据,返回几个可能类中的一个类的实例,返回
* 的类通常都有一个公共的父类和公共的方法。
* ******************************Summary*****************************
*/
namespace SimpleFactory
{
class Program
{
static void Main(string[] args)
{
BookTotal book;
book
= OperationFactory.ReadBook("D");
string result = book.ReadBook();
Console.WriteLine(result);
Console.ReadLine();
}
}
}

 

运行结果:I'm Reading DesignPattern