num08---工厂方法模式

Posted dxxdsw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了num08---工厂方法模式相关的知识,希望对你有一定的参考价值。

前提: 简单工厂模式,是在工厂类中进行逻辑判断,根据客户端的条件动态实例化相关的类,去除了客户端与具体产品的依赖,但是这样有一个问题,违反了开放封闭原则,如果新增一个逻辑,就必须修改工厂类中的逻辑判断的代码。 工厂模式解决了这个缺点。将工厂类接口抽象化,然后创建不同的子类工厂类,实现工厂类接口。每个子类工厂去实现具体的逻辑产品类。本质上就是把原有工厂类实现的 实例化代码逻辑  延迟  到 其子类中去实现。 

样例代码:

创建一个模型工厂接口以及两个模型工厂实现类,一个徐工,一个利勃海尔,不同工厂分别创建对应品牌的模型对象。

 * @description :建立模型父类工厂接口
 */
public interface CreateModelParentFactory {

    //创建模型方法
    public Model createModel();
    
}
 * @description :利勃海尔模型创建工厂
 */
public class CreateLiebherrModelFactory implements CreateModelParentFactory {

    @Override
    public Liebherr createModel() {
        return new Liebherr();

    }

}
 * @description :徐工模型创建工厂
 */
public class CreateXuGongModelFactory implements CreateModelParentFactory {

    @Override
    public Xugong createModel() {
        return new Xugong();

    }

}

创建模型类以及不同品牌的模型类子类。

 * @description :
 */
public class Model {
    public void testFunction() {
        System.out.println("我是模型父类");
    }

}
public class Liebherr extends Model{
    
    public void testFuction() {
        System.out.println("我是利勃海尔模型");
    }

}
 */
public class Xugong extends Model {
    
    public void testFunction() {
        System.out.println("我是徐工模型");
    }

}

测试方法:

 * @description :
 */
public class Main {
    
    public static void main(String[] args) {
        CreateLiebherrModelFactory liFactory = new CreateLiebherrModelFactory();
        Liebherr libModel = liFactory.createModel();
        libModel.testFuction();
    }

}

结果:

 

我是利勃海尔

技术图片

 

 

,嘿嘿(●´∀`●)

 

现在如果想要生产新的  三一重工的模型,就去新建三一模型类、三一模型工厂。即可。

相比较简单工厂模式而言,工厂模式避免了违背开放封闭原则,又保持了封装对象的创建过程,缺点是每增加一个产品,需要增加类,增加开发量。

不过个人认为这个缺点基本可以忽略。孰轻孰重,很明显。

 

以上是关于num08---工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

C++工厂模式(简单工厂工厂方法抽象工厂)

创建型模式之工厂方法模式实例及代码操作

(转)php简单工厂模式实例讲解

设计模式-工厂方法模式

C#设计模式详解——Factory Method(工厂方法)

C#设计模式详解——Factory Method(工厂方法)