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:抽象工厂其实就是工厂方法的扩展,每添加一个产品族则工厂父类和所有子类工厂都需要改动,新增产品容易(添加新工厂),增加产品族难(扩展工厂父类),即扩展性较困难
总结:较于工厂方法模式新增了产品族,每个工厂类都生产产品族内所有产品,客户先选择工厂再选择产品种类