第三课 创建型模式 第二节 工厂方法模式(Factory Method Pattern)
2012-11-25 16:16
204 查看
一下内容整理自:工厂方法模式百度百科(http://baike.baidu.com/view/1580263.htm)、云涛的博客(http://blog.sina.com.cn/shangguanyuntao)
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作延迟到子类。核心工厂类不再负责对象的创建工作,这个工厂类成为一个工厂接口,成为所有工厂子类必须实现的接口。
工厂方法模式四要素:
1.工厂接口:工厂接口是工厂方法模式的核心,这个接口中定义了一个方法,这个方法用来返回产品接口的实例。
2.工厂实现:工厂实现决定如何实例化产品,是实现扩展的途径。这是实现工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
3.产品接口:产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。是产品对象的共同父类或共同拥有的接口。
4.产品实现:这个角色实现了产品接口所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
工厂方法模式的应用:
1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
2.只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。
工厂方法模式和简单工厂模式的区别:简单工厂模式违背了开放-封闭原则(OCP),工厂方法模式解决了简单工厂模式存在的问题。
工厂方法模式UML图:
工厂方法模式示例代码:
---------------------------------------------定义产品相关接口及类------------------------------------------------
/// <summary>
/// 定义产品接口,接口中定义了子类要实现的方法,即定义客户端可见方法
/// </summary>
public interface IMan {
string Name { get; set; }
string Sex { get; set; }
int Age { get; set; }
string Work { get; set; }
string GetInstruction();
}
/// <summary>
/// 产品子类--001
/// </summary>
public class Student:IMan {
public string GetInstruction()
{
string info = "姓名:" + Name + "\n职业:学生\n性别:" + Sex + "\n年龄:" + Age;
return info;
}
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string Work { get; set; }
}
/// <summary>
/// 产品子类--002
/// </summary>
public class Teacher : IMan {
public string GetInstruction()
{
string info = "姓名:" + Name + "\n职业:教师\n性别:" + Sex + "\n年龄:" + Age;
return info;
}
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string Work { get; set; }
}
-----------------------------------定义工厂相关接口及类---------------------------------------
/// <summary>
/// 定义工厂接口
/// </summary>
public interface IFactory {
IMan CreateMan();
}
/// <summary>
/// 为学生类定义学生工厂,用于建立学生类,将实例化子类的操作抽象到工厂中
/// </summary>
public class StudentFactory : IFactory {
public IMan CreateMan()
{
return new Student();
}
}
public class TeacerFactory : IFactory {
public IMan CreateMan()
{
return new Teacher();
}
}
----------------客户端调用------------------------
private void button1_Click(object sender, EventArgs e)
{
string name = this.txtName.Text;
int age = int.Parse(this.txtAge.Text);
string sex = this.txtSex.Text;
IFactory factory = new TeacerFactory();
IMan teacher = factory.CreateMan();
teacher.Name = name;
teacher.Age = age;
teacher.Sex = sex;
this.label8.Text = teacher.GetInstruction();
}
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作延迟到子类。核心工厂类不再负责对象的创建工作,这个工厂类成为一个工厂接口,成为所有工厂子类必须实现的接口。
工厂方法模式四要素:
1.工厂接口:工厂接口是工厂方法模式的核心,这个接口中定义了一个方法,这个方法用来返回产品接口的实例。
2.工厂实现:工厂实现决定如何实例化产品,是实现扩展的途径。这是实现工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
3.产品接口:产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。是产品对象的共同父类或共同拥有的接口。
4.产品实现:这个角色实现了产品接口所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
工厂方法模式的应用:
1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
2.只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。
工厂方法模式和简单工厂模式的区别:简单工厂模式违背了开放-封闭原则(OCP),工厂方法模式解决了简单工厂模式存在的问题。
工厂方法模式UML图:
工厂方法模式示例代码:
---------------------------------------------定义产品相关接口及类------------------------------------------------
/// <summary>
/// 定义产品接口,接口中定义了子类要实现的方法,即定义客户端可见方法
/// </summary>
public interface IMan {
string Name { get; set; }
string Sex { get; set; }
int Age { get; set; }
string Work { get; set; }
string GetInstruction();
}
/// <summary>
/// 产品子类--001
/// </summary>
public class Student:IMan {
public string GetInstruction()
{
string info = "姓名:" + Name + "\n职业:学生\n性别:" + Sex + "\n年龄:" + Age;
return info;
}
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string Work { get; set; }
}
/// <summary>
/// 产品子类--002
/// </summary>
public class Teacher : IMan {
public string GetInstruction()
{
string info = "姓名:" + Name + "\n职业:教师\n性别:" + Sex + "\n年龄:" + Age;
return info;
}
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string Work { get; set; }
}
-----------------------------------定义工厂相关接口及类---------------------------------------
/// <summary>
/// 定义工厂接口
/// </summary>
public interface IFactory {
IMan CreateMan();
}
/// <summary>
/// 为学生类定义学生工厂,用于建立学生类,将实例化子类的操作抽象到工厂中
/// </summary>
public class StudentFactory : IFactory {
public IMan CreateMan()
{
return new Student();
}
}
public class TeacerFactory : IFactory {
public IMan CreateMan()
{
return new Teacher();
}
}
----------------客户端调用------------------------
private void button1_Click(object sender, EventArgs e)
{
string name = this.txtName.Text;
int age = int.Parse(this.txtAge.Text);
string sex = this.txtSex.Text;
IFactory factory = new TeacerFactory();
IMan teacher = factory.CreateMan();
teacher.Name = name;
teacher.Age = age;
teacher.Sex = sex;
this.label8.Text = teacher.GetInstruction();
}
相关文章推荐
- C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
- 设计模式(创建型)之工厂方法模式(Factory Method Pattern)
- 创建型模式:工厂方法模式(Factory Method Pattern)
- 创建型模式——工厂方法模式(Factory Method Pattern)
- Java设计模式——创建型模式——工厂方法模式(Factory METHOD Pattern)
- 工厂方法模式(Factory Method Pattern,对象创建型模式)
- C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
- 设计模式学习笔记--工厂方法模式(Factory Method Pattern)【创建型模式】
- 工厂方法模式(Factory Method Pattern,对象创建型模式)
- 六个创建型模式2:工厂方法模式-Factory Method Pattern 【学习难度:★★☆☆☆,使用频率:★★★★★】
- 23种设计模式(2)_创建型_工厂方法模式(Factory Method Pattern)
- 设计模式(3)の创建型の工厂方法模式(Factory Method)の静态工厂方法模式
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式)
- 设计模式-工厂方法模式(factoryMethod pattern)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)
- 设计模式---工厂方法模式(Factory Method Pattern)
- 设计模式系列(五)工厂方法模式(Factory Method Pattern)
- [导入]C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式).zip(10.09 MB)