using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
public interface 厨师接口
{
void 函数();
面条接口 做面条();
米饭接口 做米饭();
} class 南方厨师 : 厨师接口
{
public void 函数()
{
Console.WriteLine("南方厨师做南方菜");
}
public 面条接口 做面条()
{
Console.WriteLine("南方厨师做南方面条");
面条接口 面条 = new 南方面条();
return 面条;
}
public 米饭接口 做米饭()
{
Console.WriteLine("南方厨师做南方米饭");
米饭接口 米饭 = new 南方米饭();
return 米饭;
}
}
//-----------------定义面条产品---------------------------------
public interface 面条接口
{
} class 北方面条 : 面条接口
{
public 北方面条()
{
Console.WriteLine("北方面条产生了");
}
} class 南方面条 : 面条接口
{
public 南方面条()
{
Console.WriteLine("南方面条产生了");
}
} //-----------------定义米饭产品---------------------------------
public interface 米饭接口
{ } class 北方米饭 : 米饭接口
{
public 北方米饭()
{
Console.WriteLine("北方米饭产生了");
}
} class 南方米饭 : 米饭接口
{
public 南方米饭()
{
Console.WriteLine("南方米饭产生了");
}
} class Program
{
static void Main(string[] args)
{
厨师接口 厨师 = new 南方厨师();
厨师.函数();
厨师.做米饭();
厨师.做面条();
Console.ReadLine();
}
}
}
1程序中是否存在不足的地方,请指正。
2你们觉得工厂的优点与缺点是什么。谢谢。
解决方案 »
- 如何设置解决方案,使得两个exe按设定次序运行
- Hashtable为什么能存进去但是取不出?
- 当 A可以整除B的时候: C=A/B 不能整除的时候:如果A>B ,C=A/B+1,否则C=1,最简单的写法,应该怎样写?
- 控制台应用程序与Windows应用程序之间的区别
- C#最新问题
- 如何删除文件目录下的所有文件!
- visual studio 2005 如何正确安装 VSTO
- 关于DirectShow创建一个特定的Filter graph
- 666分寻求installshield developer 8.0
- c# winform怎么调用IIS上的DLL
- 升星 :-) 散分... 日期格式
- 求个 串口通信技术
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/CsharpOOD.aspx
-------------简单工厂----------------interface 厨师接口
{
void 做饭();
void 炒菜();
}public class 南方厨师:厨师接口
{
void 做饭()
{
Console.WriteLine("南方厨师做南方饭");
}
void 炒菜()
{
Console.WriteLine("南方厨师炒南方菜");
}
}
public class 北方厨师:厨师接口
{
void 做饭()
{
Console.WriteLine("北方厨师做南方饭");
}
void 炒菜()
{
Console.WriteLine("北方厨师炒南方菜");
}
}public class Factory
{
public static 厨师接口 CreateChef(厨师类型标志 type)
{
switch(type)//根据不同的参数实例化不同的子类
{
case "南方": return new 南方厨师();
case "北方": return new 北方厨师();
default:throw new Exception("没有这类厨师...");
}
}
}
class Program
{
static void Main(string[] args)
{
厨师接口 厨师 = Factory.CreateChef("南方");//这里就可以根据不同的参数,得到不同的子类
厨师.做饭();//因为多态性,他会根据不同的子类,调用不同的方法
厨师.做炒菜();
Console.ReadLine();
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;namespace ConsoleApplication1
{
public interface 厨师接口
{
void 函数();
面条接口 做面条();
米饭接口 做米饭();
} class 南方厨师 : 厨师接口
{
public void 函数()
{
Console.WriteLine("南方厨师做南方菜");
}
public 面条接口 做面条()
{
Console.WriteLine("南方厨师做南方面条");
面条接口 面条 = new 南方面条();
return 面条;
}
public 米饭接口 做米饭()
{
Console.WriteLine("南方厨师做南方米饭");
米饭接口 米饭 = new 南方米饭();
return 米饭;
}
} class 北方厨师 : 厨师接口
{
public void 函数()
{
Console.WriteLine("北方厨师做南方菜");
}
public 面条接口 做面条()
{
Console.WriteLine("北方厨师做南方面条");
面条接口 面条 = new 北方面条();
return 面条;
}
public 米饭接口 做米饭()
{
Console.WriteLine("北方厨师做南方米饭");
米饭接口 米饭 = new 北方米饭();
return 米饭;
}
}
//-----------------定义面条产品---------------------------------
public interface 面条接口
{
} class 北方面条 : 面条接口
{
public 北方面条()
{
Console.WriteLine("北方面条产生了");
}
} class 南方面条 : 面条接口
{
public 南方面条()
{
Console.WriteLine("南方面条产生了");
}
} //-----------------定义米饭产品---------------------------------
public interface 米饭接口
{ } class 北方米饭 : 米饭接口
{
public 北方米饭()
{
Console.WriteLine("北方米饭产生了");
}
} class 南方米饭 : 米饭接口
{
public 南方米饭()
{
Console.WriteLine("南方米饭产生了");
}
} class Program
{
static void Main(string[] args)
{
//厨师接口 厨师 = new 南方厨师();
//厨师.函数();
//厨师.做米饭();
//厨师.做面条();
//Console.ReadLine();
北方厨师做菜();
南方厨师做菜();
Console.ReadLine(); Console.WriteLine("南北方厨师一起做菜\n");
Thread 南方 = new Thread(南方厨师做菜);
Thread 北方 = new Thread(北方厨师做菜);
南方.Start();
北方.Start();
Console.WriteLine(); 继续等待:
if (南方.ThreadState == ThreadState.Stopped && 北方.ThreadState == ThreadState.Stopped)
{
Console.WriteLine("南北方厨师都做完了");
}
else
{
goto 继续等待;
} Console.ReadLine();
}
private static void 北方厨师做菜()
{
Console.WriteLine("北方厨师开始了");
厨师接口 北方厨师 = new 北方厨师();
北方厨师.函数();
北方厨师.做米饭();
北方厨师.做面条();
Console.WriteLine("北方厨师做完了");
return;
} private static void 南方厨师做菜()
{
Console.WriteLine("南方厨师开始了");
厨师接口 南方厨师 = new 南方厨师();
南方厨师.函数();
南方厨师.做米饭();
南方厨师.做面条();
Console.WriteLine("南方厨师做完了");
return;
}
}}
抽象工厂:http://www.cnblogs.com/terrylee/archive/2005/12/13/295965.html