2、工厂模式

一、简单工厂模式

在一个工厂类中暴露一个带参数的方法,根据方法参数实例化所需要的对象,由于工厂中包含了判断逻辑,不符合(OCP),只适应于简单固定的几个对象,后期新增对象,需要修改工厂方法

 

二、反射模式,这是基本简单模式的优化,根据需要创建的实例全名通过反射创建实例,这样去掉了简单模式中的逻辑判断,从而遵循了OCP原则

public static class ReflectFactory
{
    public static IAnimal? CreateAnimalInstance(string typeName)
    {
        var typeInfo = Type.GetType(typeName,true,true);
        return typeInfo?.Assembly.CreateInstance(typeName, true) as IAnimal;
    }
}

三、方法模式,每一个产品设计一个工厂接口,同类的产品实例实现自己的工厂,客户端使用时,实例化不同的工厂,实际也是简单工厂的优化,把判断逻辑提供给客户端,由具体工厂解耦实例对象

复制代码
interface IMethodFactory
{
    IAnimal CreateAnimalInstance();
}

public class BirdFactory : IMethodFactory
{
    public IAnimal CreateAnimalInstance()
    {
        return new Bird();
    }
}

public class DogFactory : IMethodFactory
{
    public IAnimal CreateAnimalInstance()
    {
        return new Dog();
    }
}
复制代码

四、抽象模式,抽象模式或以说是多个方法模式工厂的聚合

复制代码
interface IAbstractFactory
{
    IAnimal CreateAnimalInstance();
    IPlant CreatePlantInstance();

}

public class AbstractFactoryA : IAbstractFactory
{
    public IAnimal CreateAnimalInstance()
    {
        return new Bird();
    }

    IPlant IAbstractFactory.CreatePlantInstance()
    {
        return new PlantA();
    }
}

public class AbstractFactoryB : IAbstractFactory
{
    public IAnimal CreateAnimalInstance()
    {
        return new Dog();
    }

    IPlant IAbstractFactory.CreatePlantInstance()
    {
        return new PlantB();
    }
}
复制代码

 

posted @   刘继先  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示