C#设计模式之工厂模式(3)

来源:互联网 发布:定制精品购物软件 编辑:程序博客网 时间:2024/06/10 19:02

抽象工厂模式比工厂模式具有更高层次的抽象性。当要返回一系列相关类的某一个,而每个类都能根据需要返回不同的对象时,可以使用这种模式。换句话说,抽象工厂是一个工厂对象,他能返回一系列相关类中的某一个类。也就是可以用简单工厂去决定返回哪一个类。

工厂模式的工厂,实例化的对象只有一个,如果实例化的对象是多个,就成了抽象工厂模式,其实工厂模式和抽象工厂也就这点区别

示意图


示例代码

public abstract class Button    {        public abstract void DisplayButton();     }    public class WindowsButton : Button    {        public override void DisplayButton()        {            Console.WriteLine("我的类型是:{0}",this.GetType().ToString());        }    }    public class LinuxButton : Button    {        public override void DisplayButton()        {            Console.WriteLine("我的类型是:{0}", this.GetType().ToString());        }    }    public abstract class TextBox    {        public abstract void DisplayTextBox();     }    public class WindowsTextBox : TextBox    {        public override void DisplayTextBox()        {            Console.WriteLine("我的类型是:{0}", this.GetType().ToString());        }    }    public class LinuxTextBox : TextBox    {        public override void DisplayTextBox()        {            Console.WriteLine("我的类型是:{0}", this.GetType().ToString());        }    }
创建工厂

public abstract class AbstractFactory    {        public abstract Button CreateButton();        public abstract TextBox CreateTextBox();    }    public class WindowsFactory : AbstractFactory    {        public override Button CreateButton()        {            return new WindowsButton();        }        public override TextBox CreateTextBox()        {            return new WindowsTextBox();        }    }    public class LinuxFactory : AbstractFactory    {        public override Button CreateButton()        {            return new LinuxButton();        }        public override TextBox CreateTextBox()        {            return new LinuxTextBox();        }    }

调用工厂

AbstractFactory factory;            Button button;            TextBox textbox;            factory = new WindowsFactory();            button = factory.CreateButton();            textbox = factory.CreateTextBox();            button.DisplayButton();            textbox.DisplayTextBox();            Console.WriteLine("------------------------------------------");            factory = new LinuxFactory();            button = factory.CreateButton();            textbox = factory.CreateTextBox();            button.DisplayButton();            textbox.DisplayTextBox();


原创粉丝点击