【Android】三种工厂模式简析

简单介绍三种工厂模式:简单工厂模式,工厂方法模式,抽象工厂模式
1.简单工厂模式
这是一个小工厂,什么都由自己生产,别人要什么就调用自己的相应工具去生产
具备三个特征:具体工厂A,具体生产工具B,抽象生产对象C
就是 A调用工具B去生产C,工具可以有多种(我成为类B工具),每种生产对应的产品(类C产品,C是所有产品的父接口),下面看代码

//抽象产品角色:交通工具车   类C
    public abstract class Car
    {
        public virtual void GoToWork()
        {
        }
    }

    //具体产品角色:自行车  工具B
    public class Bike : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("骑自行车去上班");
        }
    }
    //具体产品角色:公交车  工具B
    public class Bus : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("做公交车去上班");
        }
    }
    //工厂角色:简单工厂类  
    public class SimpleFactory
    {
        public static Car CreateSimple(string str)
        {
            Car simple = null;
            switch (str)
            {
                case "Bike":
                    simple = new Bike();
                    break;
                case "Bus":
                    simple = new Bus();
                    break;
                //……
            }
            return simple;

        }
    }


Car car = SimpleFactory.CreateSimple("Bus");
    car.GoToWork();

2.工厂方法模式
就像一个公司做大了,涉及的业务多了,管理就不方便了,这时候往往会成了子公司,让每一个子公司去负责一块业务,自己就称为了管理子公司的母公司,而不涉及具体的业务(抽象) 所以就有四 个角色: 母公司 ->抽象工厂 ,子公司 -> 具体工厂, 产品类 -> 抽象接口, 生产工具类 -> 具体方法

//抽象产品角色:交通工具车
    public abstract class Car
    {
        public virtual void GoToWork()
        {
        }

    }

    //具体产品角色:自行车
    public class Bike : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("骑自行车去上班");
        }
    }
    //具体产品角色:公交车
    public class Bus : Car
    {
        public override void GoToWork()
        {
            Console.WriteLine("做公交车去上班");
        }
    }

    //抽象工厂角色:工厂接口
    public interface IFactory
    {
        Car ByWhatWay();
    }
    //具体工厂类:自行车类
    public class BikeFactory : IFactory
    {
        public Car ByWhatWay()
        {
            return new Bike();
        }
    }
    //具体工厂类:公交车类
    public class BusFactory : IFactory
    {
        public Car ByWhatWay()
        {
            return new Bus();
        }

    }

 //根据客户端实例化的工厂决定如何去上班
 IFactory factory = new BusFactory();   //常规写法
 Car car = factory.ByWhatWay();
 car.GoToWork();

3.抽象工厂模式,这个模式就是前面连个模式的结合,即做大了,成为了母公司,并且子公司也做大了,可以做很多业务。从大局来看,是工厂方法模式,从局部看,是简单工厂模式,就这样,直接看代码

//抽象交通工具车
    public abstract class Car
    {
        //名字
        public string CarName{ get; set; }
        public virtual string GoToWork()
        {
            return CarName;
        }

    }
    //抽象早饭类
    public abstract class BreakFast
    {
        //早饭名称
        public string FoodName { get; set; }

        public virtual string Eat()
        {
            return FoodName;
        }
    }

    //自行车
    public class Bike : Car
    {
        public override string GoToWork()
        {
            CarName = "骑着自行车";
            return CarName;
        }
    }
    //公交车
    public class Suv: Car
    {
        public override string GoToWork()
        {
            CarName = "开着SUV汽车";
            return CarName;
        }
    }

    //高逼格早饭:三明治牛奶
    public class SandWichAndMilk : BreakFast
    {
        public override string Eat()
        {
            FoodName = "三明治和牛奶";
            return FoodName;
        }
    }

    //苦逼早饭:包子豆浆
    public class BaoziAndDoujiang : BreakFast
    {
        public override string Eat()
        {
            FoodName = "包子豆浆";
            return FoodName;
        }
    }

    //抽象工厂类
    public abstract class AbstractFactory
    {
        //创建交通工具方法
        public abstract Car CreatCar();

        //创建早饭方法
        public abstract BreakFast CreateBreakFast();

    }

    //具体工厂类:苦逼程序员
    public class LowFactory : AbstractFactory
    {
        public override Car CreatCar()
        {
            return new Bike();
        }

        public override BreakFast CreateBreakFast()
        {
            return new BaoziAndDoujiang();
        }
    }
    //具体工厂类:高逼格程序员
    public class HighFactory : AbstractFactory
    {
        public override Car CreatCar()
        {
            return new Suv();
        }

        public override BreakFast CreateBreakFast()
        {
            return new SandWichAndMilk();
        }
    }

    public class CoderLove
    {
        private Car car;
        private BreakFast breakFast;
        public CoderLove (AbstractFactory fac)
        {
            car=fac.CreatCar();
            breakFast=fac.CreateBreakFast();
        }

        public void GetCoderLove()
        {
            Console.WriteLine("早饭吃完"+breakFast.Eat()+","+car.GoToWork()+"去上班");
        }
    }
// 选择派哪个子公司去做
AbstractFactory factory=new HighFactory();
// 子公司和业务联系
 CoderLove coder=new CoderLove(factory);
 // 做事
 coder.GetCoderLove();

这里写图片描述

抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。

由于这种隔离,更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

除了以上苦逼程序员,高逼格程序员,还可以具体添加一个开车SUV吃着包子豆浆的具体工厂,也可以添加骑着自行车吃着三明治牛奶的具体工厂,换不同的子公司去做,就有不同的结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值