⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractfactoryrealworld.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Text;
using System.Windows.Forms;

//抽象工厂(AbstractFactory)
//意图
//    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
//适用性
//    1.一个系统要独立于它的产品的创建、组合和表示时。
//    2.一个系统要由多个产品系列中的一个来配置时。
//    3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
//    4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
//
//
//特点(C++)
//  1.只提供了一个创建接口,其返回值为具体产品:如 AbstractProduct *Client::CreateProduct(AbstractFactory &factory);
//  2.接口的参数是一个工厂对象(AbstractFactory &factory)的引用,参数类型(AbstractFactory)为抽象基类,调用时根据需要传入具体工厂对象即可;
//  3.接口内部实现了一系列相关或相互依赖对象(抽象产品)的创建:当传入具体工厂时,接口实现的就是一系列具体产品的创建;
//  4.创建的产品立即返回(CreateProduct)。
//参与者
//  AbstractFactory — 声明一个创建抽象产品对象的操作接口。
//  ConcreteFactory — 实现创建具体产品对象的操作。
//  AbstractProduct — 为一类产品对象声明一个接口。
//  ConcreteProduct — 定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。
//  Client          — 仅使用由AbstractFactory和AbstractProduct类声明的接口。

namespace DesignPattern.AbstractFactoryRealWorld
{
    class AbstractFactoryRealWorld : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Create and run the Africa animal world 
            ContinentFactory africa = new AfricaFactory();
            AnimalWorld world = new AnimalWorld(africa);
            world.RunFoodChain(); 
            
            // Create and run the America animal world 
            ContinentFactory america = new AmericaFactory();
            world = new AnimalWorld(america);
            world.RunFoodChain(); 
            
            // Wait for user input 
            ////Console.Read();
        }
    }

     // "AbstractFactory" 
    abstract class ContinentFactory 
    {
        public abstract Herbivore CreateHerbivore();//草食动物
        public abstract Carnivore CreateCarnivore();//肉食动物
    }

    // "ConcreteFactory1" 
    class AfricaFactory : ContinentFactory 
    {
        public override Herbivore CreateHerbivore()  
        {
            return new Wildebeest(); //羚羊
        }
        
        public override Carnivore CreateCarnivore()
        { 
            return new Lion();      //狮子
        }
    } 
    
    // "ConcreteFactory2" 
    class AmericaFactory : ContinentFactory
    {
        public override Herbivore CreateHerbivore() 
        {
            return new Bison();     //野牛
        }
        
        public override Carnivore CreateCarnivore() 
        {
            return new Wolf();      //狼
        }
    }

    // "AbstractProductA" 
    abstract class Herbivore 
    {
    }
    
    // "AbstractProductB" 
    abstract class Carnivore 
    {
        public abstract void Eat(Herbivore h);
    }
    
    // "ProductA1" 
    class Wildebeest : Herbivore
    {
    }
    
    // "ProductB1" 
    class Lion : Carnivore
    {
        public override void Eat(Herbivore h) 
        {
            // Eat Wildebeest 
            DesignPattern.FormMain.OutputInfo(this.GetType().Name + " eats " + h.GetType().Name);
        }
    }
    
    // "ProductA2" 
    class Bison : Herbivore 
    {
    }
    
    // "ProductB2" 
    class Wolf : Carnivore
    {
        public override void Eat(Herbivore h) 
        {
            // Eat Bison 
            DesignPattern.FormMain.OutputInfo(this.GetType().Name + " eats " + h.GetType().Name); 
        }
    }
    
    // "Client" 
    class AnimalWorld 
    {
        private Herbivore herbivore; 
        private Carnivore carnivore; 
        
        // Constructor 
        public AnimalWorld(ContinentFactory factory) 
        {
            carnivore = factory.CreateCarnivore();
            herbivore = factory.CreateHerbivore();
        }
        
        public void RunFoodChain()
        {
            carnivore.Eat(herbivore); 
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -