zoukankan      html  css  js  c++  java
  • 用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();
            }
        }
    }

  • 相关阅读:
    [noip2013]华容道
    [tyvj 1061] Mobile Service (线性dp 滚动数组)
    [bzoj 2726] 任务安排 (斜率优化 线性dp)
    [洛谷 P2365] 任务安排 (线性dp)
    [poj 3666] Making the Grade (离散化 线性dp)
    【模板】manacher算法
    [tyvj 1071] LCIS
    [NOIP 2012] 国王游戏
    [NOIP 2010] 关押罪犯 (二分+二分图判定 || 并查集)
    [NOI 2002] 银河英雄传说 (带权并查集)
  • 原文地址:https://www.cnblogs.com/immensity/p/1246781.html
Copyright © 2011-2022 走看看