AbstractFactory

将类的实例化,推移到具体实现子类中实现【类图】


应用:对于产品族的维护,对于多种产


品族,方便维护产品族,产品类品种繁多。比如对于一个普通人拿着Gun,骑着摩托,抽着雪茄。

第二个兽人,拿着战斧,骑着战车,吃着肉。可以把这两个看成两个产品族。

角色划分:

    抽象工厂角色:创建工厂类必须实现的接口

    具体工厂角色:实现抽象工厂需要实现的接口

    抽象产品角色:把具有共同属性的一类产品抽象出来一个超类,包含了应用程序密切相关的逻辑

    具体产品角色:实现抽象产品角色定义的接口

那么我们解决方法:

第一步建立一个抽象工厂方法AbstractFactory类,该类与具体需要实现的逻辑没有关系。

public abstract class AbstractFactory

{

          //里面定义了子类需要实现的接口

        public abstract Food createfood();
        public abstract Wepon createWepon();
        public abstract Vehicle createVehicle();

}

第二步:分别对武器,座驾,食物进行抽象出来他们的父类那么我们可以建立这样的三个类

武器抽象类: public abstract class Wepon
    {

       //武器类都有能实现开火的功能

        public abstract void fire();
    }

座驾抽象类:    public abstract class Vehicle
    {

        //座驾类需要都需要实现run的功能
        public abstract void run();
    }

实物抽象类:public abstract class Food
    {

         //获得食物名称的方法
        public abstract void GetName();
    }

第三部:

对于普通人的实体武器类,继承武器抽象类Wepon并实现里面的方法

 public class Ak:Wepon
    {
        public override void fire()
        {
            Console.WriteLine("Ak47 GUN");
        }
    }

其他的一些方法都可以这样实现。具体的武器类都继承Wepon类,具体座驾类都继承Vehicle父类,具体食物类都继承Food类

第四部:

分别对不同的产品(种族)进行工厂方法进行实现。

对,普通人类继承抽象工厂类,这个普通人类中实现了抽象工厂AbstractFactory中需要实现的接口

    class Nature:AbstractFactory
    {
        public override Food createfood()
        {
            return new Apple();
        }
        public override Vehicle createVehicle()
        {
            return new Car();
        }
        public override Wepon createWepon()
        {
            return new Ak();
        }
    }

这样也可以实现对兽人类 的实现。


第五步:

在主程序中调用抽象工厂方法实例化相应的产品族

    class Program


    {
        static void Main(string[] args)
        {
            AbstractFactory af = new Nature();  //
            af.createfood().GetName();
            af.createVehicle().run();
            af.createWepon().fire();
            Console.ReadLine();
        }
    }


抽象工厂的可以方便的添加产品族。对很多产品类的维护简单,还可以把需要实现的产品类写入到配置文件中,这时我们就可以在

修改主程序的前提下完成对产品类进行修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scalzdp

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值