设计模式-工厂方法

工厂方法用来出来对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码和子类对象对象的创建代码解耦了。

工厂方法模式定义了一个创建对象的接口,但有子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

把产品和工厂分隔开,都是针对产品接口进行编程。

我们举个例子,使用工厂创建汽车。

首先创建一个汽车产品接口

 public interface car
    {
         void makeCar();

         void dirveCar();
    }

然后创建具体的汽车产品

 public class QIYA : car
    {
        public void dirveCar()
        {
            Console.WriteLine("开起亚汽车");
        }

        public void makeCar()
        {
            Console.WriteLine("制作起亚汽车");
        }
    }

    public class xiandai : car
    {
        public void dirveCar()
        {
            Console.WriteLine("开现代汽车");
        }

        public void makeCar()
        {
            Console.WriteLine("制造现代汽车");
        }
    }

然后创建产品工厂超类,里面定义具体对产品的操作行为

 public abstract class useCar
    {
     //定义产品
        public car car;
        public void use()
        {
            car.makeCar();
            car.dirveCar();
        }
    }

定义具体的产品工厂

public class QIYAFactory:useCar
    {
        public QIYAFactory()
        {
            base.car = new QIYA();
        }
    }

    public class XIANDAIFcatory : useCar
    {
        public XIANDAIFcatory()
        {
            car = new xiandai();
        }
    }

测试

			useCar useCar = new QIYAFactory();
            useCar.use();
            useCar = new XIANDAIFcatory();
            useCar.use();

输出

制作起亚汽车
开起亚汽车
制造现代汽车
开现代汽车

如果我们再要创建一个丰田汽车产品和工厂的话,需要增加两个地方

public class toyto : car
    {
        public void dirveCar()
        {
            Console.WriteLine("开丰田汽车");
        }

        public void makeCar()
        {
            Console.WriteLine("制作丰田汽车");
        }
    }

    public class toytoFactory : useCar
    {
        public toytoFactory()
        {
            car = new toyto();
        }
    }

如果使用的话,也需要同步初始这个工厂

 static void Main(string[] args)
        {
            useCar useCar = new QIYAFactory();
            useCar.use();
            useCar = new XIANDAIFcatory();
            useCar.use();

            useCar = new toytoFactory();
            useCar.use();
            Console.ReadLine();
        }

可以看出,使用工厂方法创建的类,是比较繁琐的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值