A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 墨蹄 中级黑马   /  2014-3-28 19:57  /  1080 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 墨蹄 于 2014-3-29 15:09 编辑

抽象工厂设计模式是什么一回事,请说的通俗易懂一些

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

3 个回复

倒序浏览

这张图里有工厂,工厂可以生产的产品分别有:a、b、c,我让里边的产品都继承于父类产品。旁边来一个客户,咱们工厂生产什么产品由谁决定啊?当然是客户了,但是咱们工厂知道不知道客户要的是什么东西?不知道。那么咱么最终把父类产品给客户准错不了,我们让父类产品里面装着子类的对象。这个就是咱们的简单工厂设计模式。

工厂设计模式前面加了“抽象”,说明父类的是一个抽象类,子类继承父类的时候会覆写父类的方法。
要是觉得我讲得还是很抽象的话,我写一个实例来诠释它。
例子:有个工厂,生产不同品牌的笔记本:IBM 、 Acer、 Lenovo  和Dell。
我们让这些品牌继承一个父类笔记本(NoteBook),当问客户需要什么笔记本的时候,我们给他什么笔记本。
说明:由于版面关系,建的类不正规,现实中每个类单独建在一个文件中
//新建一个笔记本父类NoteBook
    public abstract class NoteBook
    {
        public abstract void SayHello();
    }

//新建一个子类Acer继承父类NoteBook
public class Acer:NoteBook
    {
        public override void SayHello()
        {
            Console.WriteLine("我是宏基笔记本");
        }
    }

//新建子类Dell继承父类NoteBook
public class Dell : NoteBook
    {
        public override void SayHello()
        {
            Console.WriteLine("我是戴尔笔记本");
        }
    }

//新建子类IBM继承父类NoteBook
public class IBM:NoteBook
    {
        public override void SayHello()
        {
            Console.WriteLine("我是IBM笔记本");
        }
    }

//新建子类Lenovo继承父类NoteBook
public class Lenovo:NoteBook
    {
        public override void SayHello()
        {
            Console.WriteLine("我是联想笔记本");
        }
    }


class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("你需要神马品牌的笔记本");
            string brand = Console.ReadLine();

            NoteBook nb = GetNoteBook(brand);
            nb.SayHello();
            Console.ReadKey();
        }

//这个是核心内容,拿到用户的对象
        public static NoteBook GetNoteBook(string brand)
        {
            NoteBook nb = null;
            switch (brand)
            {
                case "IBM": nb = new IBM();
                    break;
                case "Lenovo": nb = new Lenovo();
                    break;
                case "Dell": nb = new Dell();
                    break;
                case "Acer": nb = new Acer();
                    break;
            }
            return nb;
        }
    }



ps.若有不对的地方,欢迎批评指正

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

回复 使用道具 举报
楼上说的很详细,我就给你说下概念的东西。
工厂模式就是根据客户的选择而调取不同的对象来实现。
主要核心内容就是用了面向对象的多态。
回复 使用道具 举报
说的很详细,核心内容就是多态的应用:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马