设计模式——抽象工厂

来源:互联网 发布:js 弹出对话框 编辑:程序博客网 时间:2024/06/16 15:44

抽象工厂关注点是:一个工厂里面可以创建多种类型的实例
比如 既可以创建 Phone 也可以创建Pad
抽象工厂包含多少个职责,分别创建不同类型的实例

抽象工厂和简单工厂的区别在于,工厂可以扩展

抽象工厂适合工厂职责是稳定的情况下


平板基类

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DesignMode.Interface{    public abstract class BasePad    {        public abstract void Online();        public abstract void Photo();    }}

iPad类

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    public class iPad : BasePad    {        public override void Online()        {            Console.WriteLine("use {0} Online", this.GetType().Name);        }        public override void Photo()        {            Console.WriteLine("use {0} Photo", this.GetType().Name);        }    }}

山寨版 iPad类

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    public class iPadChina : BasePad    {        public override void Online()        {            Console.WriteLine("use {0} Online", this.GetType().Name);        }        public override void Photo()        {            Console.WriteLine("use {0} Photo", this.GetType().Name);        }    }}

手机基类

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DesignMode.Interface{    public abstract class BasePhone    {        public abstract void Call();        public abstract void Text();    }}

iPhone 类

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    public class iPhone : BasePhone    {        public iPhone(int price)        {        }        public override void Call()        {            Console.WriteLine("use {0} call", this.GetType().Name);        }        public override void Text()        {            Console.WriteLine("use {0} text", this.GetType().Name);        }    }}

山寨版 iPhone 类

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    public class iPhoneChina : BasePhone    {        public iPhoneChina(int price)        {        }        public override void Call()        {            Console.WriteLine("use {0} call", this.GetType().Name);        }        public override void Text()        {            Console.WriteLine("use {0} text", this.GetType().Name);        }    }}

抽象工厂

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    /// <summary>    /// 约束作用    /// </summary>    public abstract class AbstractFactory    {        /// <summary>        /// 创建pad        /// </summary>        /// <returns></returns>        public abstract BasePad CreatePad();        /// <summary>        /// 创建Phone        /// </summary>        /// <returns></returns>        public abstract BasePhone CreateiPhone();        //public abstract BaseWatch CreateWatch();    }}

美版工厂

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    public class ObjectFactory : AbstractFactory    {        public override BasePad CreatePad()        {            return new iPad();        }        public override BasePhone CreateiPhone()        {            return new iPhone(5000);        }    }}

国版工厂(山寨版工厂)

using DesignMode.Interface;using System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractFactory{    public class ObjectFactoryChina : AbstractFactory    {        public override BasePad CreatePad()        {            return new iPadChina();        }        public override BasePhone CreateiPhone()        {            return new iPhoneChina(3500);        }    }}

上端调用

using AbstractFactory;using DesignMode.Interface;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            {                AbstractFactory.AbstractFactory objectFactory = new ObjectFactory();                BasePhone iphone = objectFactory.CreateiPhone();                BasePad ipad = objectFactory.CreatePad();            }            {                AbstractFactory.AbstractFactory objectFactory = new ObjectFactoryChina();                BasePhone iphone = objectFactory.CreateiPhone();                BasePad ipad = objectFactory.CreatePad();            }            Console.ReadKey();        }    }}
0 0
原创粉丝点击