大家都知道,在开发中,如果用好了某种模式,那效率……
嘿嘿 我就不说了
进入正题吧:
以下都为源代码,可直接拷贝,然后自己研究
由于是讲解,所以只涉及基本的架构
项目名为:AbstractFactoryMode
1.建立抽象总工厂
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode
{
/// <summary>
/// 总工厂
/// </summary>
public abstract class AbstractFactory
{
public abstract AbstractUser CreateUser();
public abstract AbstractBook CreateBook();
}
}
2.建立子工厂(子工厂继承总工厂,实现抽象总工厂的抽象方法)
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode
{
/// <summary>
/// 一个具体的工厂
/// </summary>
public class ConcreteFactory : AbstractFactory
{
/// <summary>
/// 子工厂,用来创造用户
/// </summary>
/// <returns></returns>
public override AbstractUser CreateUser()
{
//具体的产物
return new User();
}
/// <summary>
/// 子工厂,用来创造书籍
/// </summary>
/// <returns></returns>
public override AbstractBook CreateBook()
{
//具体的产物
return new Book() ;
}
}
}
3.建立抽象产物,由具体的实体类继承
//user(用户)抽象产物
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode
{
/// <summary>
/// 抽象产物,写关于创造用户所需要的方法
/// 此抽象产物可写成接口,实现效果一样
/// </summary>
public abstract class AbstractUser
{
/// <summary>
/// 此方法用于创造用户
/// </summary>
public abstract void CreateUser();
//以下还可以写很多方法
//比如:
//public abstract IList<user> GetAllUser()--------得到所有用户
//public abstract user GetUserById()-------根据id查询用户
//public abstract user ModifyUserByName()----根据姓名修改用户
//这些方法都可以在user类中实现
//如果把此方法改为接口,那么user类中就 必须完全实现此抽象产物中的全部方法
}
}
//book(书籍)抽象产物
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode
{
/// <summary>
/// 抽象产物,写关于创造书籍所需要的方法
/// 此抽象产物可写成接口,实现效果一样
/// </summary>
public abstract class AbstractBook
{
/// <summary>
/// 此方法用与创造书籍
/// </summary>
public abstract void CreateBook();
//以下还可以写很多方法
//比如:
//public abstract IList<book> GetAllBook()--------得到所有书籍
//public abstract book GetBookById()-------根据id查询书籍
//public abstract book ModifyBookByName()----根据书名修改书籍
//这些方法都可以在book类中实现
//如果把此方法改为接口,那么book类中就 必须完全实现此抽象产物中的全部方法
}
}
4.建立实体类,用于执行具体的操作,并继承对应的抽象产物
//user(用户)类
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode
{
/// <summary>
/// 具体的实现
/// 继承产物ABstractUser
/// </summary>
public class User:AbstractUser
{
public override void CreateUser()
{
Console.WriteLine("用户创建成功");
}
/* public override IList<user> GetAllUser()
{
//写实现方法
//return null;
}
public override user GetUserById()
{
//写实现方法
//return null;
}
public override user ModifyUserByName()
{
//写实现方法
//return null;
}*/
}
}
//book(书籍)类
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode{
/// <summary>
/// 具体的实现
/// 继承产物ABstractBook
/// </summary>
public class Book:AbstractBook
{
//重写CreateBook方法
public override void CreateBook()
{
Console.WriteLine("书籍创建成功");
}
/* public override IList<Book> GetAllBook()
{
//写实现方法
//return null;
}
public override Book GetBookById()
{
//写实现方法
//return null;
}
public override Book ModifyBookByName()
{
//写实现方法
//return null;
}*/
}
}
5.有此类来实现,相当与项目中的表现层
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactoryMode{
class Program
{
static void Main(string[] args)
{
//得到一个子工厂
AbstractFactory factory = new ConcreteFactory();
//创造用户
AbstractUser user = factory.CreateUser();
user.CreateUser();
//创造书籍
AbstractBook book = factory.CreateBook();
book.CreateBook();
}
}
}