设计模式-抽象工厂模式
前言
点击查看:设计模式系列
如果你对工厂模式这个概念不是很理解,建议:设计模式-简单工厂模式 ,设计模式-工厂方法模式
抽象工厂模式
抽象工厂模式比其它工厂模式更加抽象,抽象工厂模式适用与多个抽象类的情况下,通过工厂返回多个抽象类中你需要得到的具体子类实例。
举例阐述抽象工厂模式:
假如中日爆发钓鱼岛大战(哥哥是和平倡导者,此例完全是为了给大家展示抽象工厂模式):
中国装备:炸弹类,坦克类,来消灭日本。
炸弹类:导弹,核弹;
坦克类:越野车,主站坦克;
战略:
前期中国兵工厂生产:导弹,越野车,打击日本。
后期中国兵工厂生产:核弹,主站坦克,毁灭日本。
类图:
装备类代码:
#region 炸弹系列 abstract class Bomb { abstract public void baozha(); } /// <summary> /// 导弹 /// </summary> class daodanBomb :Bomb { public override void baozha() { Console.WriteLine("我是一颗中国造导弹,来轰炸不老实的小日本!"); } } /// <summary> /// 核弹 /// </summary> class hedanBomb : Bomb { public override void baozha() { Console.WriteLine("我是一颗中国造核弹,来轰炸不老实的小日本!"); } } #endregion #region 坦克系列 abstract class Tank { abstract public void go(); } /// <summary> /// 越野车 /// </summary> class yueyeTank : Tank { public override void go() { Console.WriteLine("我是一颗中国造越野车,来踏平不老实的小日本!"); } } /// <summary> /// 主站坦克 /// </summary> class zhuzhanTank : Tank { public override void go() { Console.WriteLine("我是一颗中国造主站坦克,来踏平不老实的小日本!"); } } #endregion
工厂类代码
#region 中国兵工厂 abstract class chinaFactory { //装甲车制造车间 public abstract Tank CreateTank(); //炸弹知道车间 public abstract Bomb CreateBomb(); } //兵工厂前期制造 class qianqiFactory : chinaFactory { public override Bomb CreateBomb() { //导弹 return new daodanBomb(); } public override Tank CreateTank() { //越野车 return new yueyeTank(); } } //兵工厂后期制造 class houqiFactory : chinaFactory { public override Bomb CreateBomb() { //核弹 return new hedanBomb(); } public override Tank CreateTank() { //主站坦克 return new zhuzhanTank(); } } #endregion
客户端代码:(打仗)
// 备战 class Make { //装备 private Bomb bomb; private Tank tank; //制造加工 public Make(chinaFactory factory) { bomb = factory.CreateBomb(); tank = factory.CreateTank(); } //开始打仗 public void warStar() { //炸弹类爆炸 bomb.baozha(); //战车类前进 tank.go(); } } public class start { public static void Main() { //大战前期 chinaFactory qianqiMake = new qianqiFactory(); Make qianqi = new Make(qianqiMake); qianqi.warStar(); //点任意键,进行后期攻势!! Console.ReadKey(); //大战后期 chinaFactory houqiMake = new houqiFactory(); Make houqi = new Make(houqiMake); houqi.warStar(); Console.WriteLine("钓鱼岛是中国的,神圣不可侵犯!小日本,滚开!!"); Console.ReadLine(); } }
大战结束,总结抽象工厂模式
由于战争的不可预料性,与权威的体现不可朝令夕改,恰恰体现出啦此模式的好处,因为,战备物资部可以随意的添加新的武器,如在炸弹类中添加反物质炸弹,只用在前期或者后期工厂中添加一个方法即可,客户端战场方面不用改变,可按部就班,依照从前的形式做战。
抽象工厂模式的主要目的之一是隔离所生成的具体类,这些类被隐藏在工厂内部,完全不需要客户端知道。因为类被隔离,所以产品类系列可以随意改变或是交换。
具体好处还需自己体会抽象工厂模式的体系。
欢迎加入博客左上方群,交流探讨,设计模式,数据库,c#.net,数据结构。