用C#实现抽象工厂模式

大家都知道,在开发中,如果用好了某种模式,那效率……  

嘿嘿      我就不说了

进入正题吧:

以下都为源代码,可直接拷贝,然后自己研究

由于是讲解,所以只涉及基本的架构

 

项目名为: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();
        }
    }
}

原文地址:https://www.cnblogs.com/immensity/p/1246781.html