抽象工厂关注点是:一个工厂里面可以创建多种类型的实例
比如 既可以创建 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();
}
}
}