[学习笔记:设计模式] 1 2_(抽象)工厂模式

本文介绍了三种工厂设计模式:简单工厂模式创建单一类型的对象,工厂方法模式由子类决定实例类型,抽象工厂模式处理相关产品家族。这些模式强调了代码的灵活性和扩展性,但抽象工厂模式扩展性相对较弱。
摘要由CSDN通过智能技术生成

1.1 简单工厂模式

定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。


举例

使用同一个工厂生产不同牌子的汽车


//简单工厂类
public class SimpleFactory {
    public static Car CreatCar(string car)
    {
        Car newCar = null;
        if (car == "Benz")
        {
            newCar = new Benz();
        }
        else if (car == "BMW")
        {
            newCar = new BMW();
        }
        else if (car == "Ford")
        {
            newCar = new Ford();
        }
        return newCar;
    }
}

//客户类
public class ClientSimple : MonoBehaviour {
 
    void Start () {
        //简单工厂
        Car car1 = SimpleFactory.CreatCar("Benz");
        car1.Dirve();
        Car car2 = SimpleFactory.CreatCar("BMW");
        car2.Dirve();
        Car car3 = SimpleFactory.CreatCar("Ford"); ;
        car3.Dirve();
    }
}
 

ps:所有对象都在一个类里面创建,想要拓展程序,必须对工厂类进行修改,违背了开闭原则

总结:只有一个工厂类,生产什么产品由工厂决定


1.2 工厂方法模式

定义:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。

举例

使用不同的工厂生产不同牌子的汽车

//工厂父类
public abstract class Factory {
    public abstract Car CreatCar();
}

//工厂类继承父类并实现抽象方法:
public class BenzFactory : Factory {
    public override Car CreatCar()
    {
        return new Benz();
    }
}

public class BMWFactory : Factory {
    public override Car CreatCar()
    {
        return new BMW();
    }
}

public class FordFactory : Factory {
    public override Car CreatCar()
    {
        return new Ford();
    }
}

//通过不同的工厂会得到不同的实例化的对象
public class ClientSimple : MonoBehaviour {
 
    void Start () {
        //工厂方法
        Car car1 = new BenzFactory().CreatCar();
        car1.Dirve();
        Car car2 = new BMWFactory().CreatCar();
        car2.Dirve();
        Car car3 = new FordFactory().CreatCar();
        car3.Dirve();
    }
}

ps:可以在不影响之前工厂的情况下建立新工厂,即增加功能只需添加一个实现类,扩展性较好,

总结:有多个工厂类,每个产品开设一个工厂,客户需要什么产品就实例化该产品的工厂类


1.3 抽象工厂模式

定义:定义了一个接口用于创建相关或有依赖关系的对象族,而无需明确指定具体类。

举例

抽象工厂新开业务造火箭


//工厂父类
public abstract class Factory {
    public abstract Car CreatCar();
    public abstract Rocket CreatRocket();
}


//工厂类
public class BenzFactory : Factory {
    public override Car CreatCar()
    {
        return new BenzCar();
    }

    public override Rocket CreatCar()
    {
        return new BenzRocket();
    }
}
//另外两个工厂类同上

ps:抽象工厂其实就是工厂方法的扩展,每添加一个产品族则工厂父类和所有子类工厂都需要改动,新增产品容易(添加新工厂),增加产品族难(扩展工厂父类),即扩展性较困难

总结:较于工厂方法模式新增了产品族,每个工厂类都生产产品族内所有产品,客户先选择工厂再选择产品种类


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值