有这样一种场景:世界杯外围赛,有资格参加比赛的国家都会派出自己的球队。我们可以将每个国家的球队看成是一组系列化的对象,因为在这一支球队中,有领 队,教练,球员等角色,每一种角色都是一类对象。而每个国家派出的球队都有这些固定的角色。但不同的球队这些角色的具体对象又不一样。
  这就是抽象工厂适用的情景:提供一个创建一系列(上面的一个球队就是一个系列)相关或相互依赖对象(球队中的领队,教练,球员之间就是相关和相互依赖的关系)的接口,而无需指定它们具体的类(指不用直接定义和创建每一个具体的球队)。所以,它针对的的产品系列的情况。
  下面,我们就来实现抽象工厂。
  程序如下图:
                        设计模式--Abstract Factory抽象工厂模式  
  抽象工厂的参考者,也就是该模式中的各个类或对象之间的关系:

 

抽象产品(Abstract Product):为这一系列的某一种产品声明接口 
抽象工厂(Abstract Factory):声明生成一系列抽象产品的方法 
具体产品(Product):定义具体工厂生成的具体产品的对象,实现产品接口 
具体工厂(Concrete Factory):执行生成一系列抽象产品的方法,生成一系列具体的产品 
客户(Client):我们的应用程序客户端(不要理解成人),使用抽象产品和抽象工厂生成对象。 

 一、定义抽象产品类,这里我们定义了球队各成员的抽象产品类AbstractTeam

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory

 二、定义抽象工厂类,这里我们定义了球队的抽象工厂类AbstractCreateTeamFactory


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyAbstractFactory
{
    
// 抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。它负责声明生成一系列抽象产品的方法 

    
//本例就是负责声明生成球队这个系列中各个抽象产品(其内的领队,教练和球员)的方法

   
public abstract  class AbstractCreateTeamFactory
    {
        
public abstract Leader  CreateLeader(); //生成领队的方法
        public abstract Coach CreateCoach(); //生成教练的方法
        public abstract Players CreatePlayer();//生成球员的方法
    }
}

 三、定义具体产品类,这里我们定义了中国队ChinaTeam和澳大利亚队AustraliaTeam两个队

中国队ChinaTeam

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory

澳大利亚队AustraliaTeam

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory

 四、定义具体工厂类,这里我们定义了中国队具体工厂ChinaTeamFactory和澳大利亚队具体工AustraliaTeamFactory厂
中国队ChinaTeamFactory

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory

澳大利亚队AustraliaTeamFactory

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory

 五、TeamsCreater

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory

 

 六、客户端应用抽象工厂

设计模式--Abstract Factory抽象工厂模式using System;
设计模式--Abstract Factory抽象工厂模式
using System.Collections.Generic;
设计模式--Abstract Factory抽象工厂模式
using System.Linq;
设计模式--Abstract Factory抽象工厂模式
using System.Text;
设计模式--Abstract Factory抽象工厂模式
设计模式--Abstract Factory抽象工厂模式
namespace MyAbstractFactory


前往:设计模式学习笔记清单

相关文章:

  • 2021-06-10
  • 2021-09-16
  • 2021-12-16
  • 2022-01-06
猜你喜欢
  • 2021-11-12
  • 2021-07-09
  • 2022-01-06
  • 2021-11-03
  • 2022-02-26
  • 2021-11-06
相关资源
相似解决方案