设计模式之工厂方法

工厂方法:
百度百科的定义:
      工厂方法模式(FACTORYMETHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,
提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,
分别是抽象工厂;具体工厂;抽象产品;具体产品

UML类图


具体的代码

public interface Creator {
    ICar createCar();
}

public class BenzCreator implements Creator {
    @Override
    public ICar createCar() {
         return new BenzCar();
    }
}

public class BmwCreator implements Creator {
    @Override
    public ICar createCar() {
        return new BmwCar();
    }
}

public interface ICar {
    void run();
}

public class BenzCar implements ICar {
    @Override
    public void run() {
        System.out.println("Benz is Running");
    }
}

public class BmwCar implements ICar {
    @Override
    public void run() {
       System.out.println("BWM is Running");
    }
}

public class Client {
    public static void main(String[] args) {
        Creator benzCreator = new BenzCreator();
        benzCreator.createCar().run();

        Creator bmwCreator = new BmwCreator();
        bmwCreator.createCar().run();
    }
}                    

具体角色

接口 Creator 的角色为抽象工厂所有的具体工厂继承抽象工厂
实现类 BenzCreator 和 BmwCreator为具体的工厂,用户创建对应产品的实例
接口 ICar 的角色为产品的抽象产品,所有的具体产品继承抽象产品
实现类 BenzCar 和 BmwCar 为具体的产品,实现具体产品的行为


具体应用场景:

引用下《设计模式:可复用面向对象软件的基础》
”为创建一个对象定义一个接口,但把具体创建哪个类的实例留给子类决定。工厂方法允许将一个类的初始化延迟到自己的子类“
工厂方法模式的使用场合
客户端不知道它要创建的具体是哪一个子类。
一个类想要由自己的子类来定义某对象的创建过程。
类将创建某对象的职责代理给一些帮助子类中的一个,并且你想要将哪一个子类作为代理的信息进行局部化。

优缺点:
优点:
      在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。
      在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。

缺点:
      每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

原文地址:https://www.cnblogs.com/daily-note/p/6991952.html