大家都知道,在開發中,如果用好了某種模式,那效率……
嘿嘿 我就不說了
進入正題吧:
以下都爲源代碼,可直接拷貝,然後自己研究
由於是講解,所以只涉及基本的架構
項目名爲: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();
}
}
}