码迷,mamicode.com
首页 > 其他好文 > 详细

num08---工厂方法模式

时间:2019-10-17 23:35:27      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:interface   比较   extends   需要   创建   封装对象   rri   esc   pre   

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

样例代码:

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

 * @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---工厂方法模式

标签:interface   比较   extends   需要   创建   封装对象   rri   esc   pre   

原文地址:https://www.cnblogs.com/dxxdsw/p/11695595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!