`

设计模式之工厂方法模式

 
阅读更多

        最近一直在看设计模式相关的书籍,决定正确每天将自己学到的设计模式以及自己的理解写成博客,供大家参考和点评,主要目的还是对自己的学习做一下总结。

         最近看到一本设计模式的书籍《设计模式之禅》已经通读一遍,现在是第二遍阅读,感觉作者对设计模式的讲解很通俗易懂,通过对这本书的学习也加深自己对java框架方面的理解,java框架上又很多设计模式,以前上学的时候也学过设计模式,但是当时的理解只是停留在记忆上,并没有真正的用到实践中,通过读这本书之后回看自己开发过的项目,感觉有的地方如果使用一些设计模式的话那么代码的可扩展性会更加灵活。

       好了就说道这里,本人也不是什么码字高手,只能将自己的理解记录一下吧,今天写工厂方法模式,

其实做项目开发中,工厂方法模式我们一直都在使用,像java中的JDBC连接数据库,其实使用的就是工厂方法模式,当我们将mysql数据换到oracle数据库时,我们只需要换一下驱动就可以,这就是工厂方法模式的灵活性。

 

工厂方法模式类图(以汽车生产为例)



 

具体代码如下

 

public abstract class AbstractCarFactory {

    // 生产汽车
    protected abstract <T extends AbstractCar> T createCar(Class<T> c);
}

 

下面是汽车工厂的具体实现类

 

public class CarFactory extends AbstractCarFactory {

    /**
     * 生产汽车
     * 
     * @param c
     * @return
     */
    @Override
    protected <T extends AbstractCar> T createCar(Class<T> c) {

        AbstractCar car = null;

        try {
            car = (T) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            System.out.println("生产汽车时发生异常:" + e.getMessage());
        }

        return (T) car;
    }

}

 

目前我们的开发中用的最多的可能也是Spring这个框架,其实Spring中也有用过工厂,当我们需要使用一个对象是Spring会根据我们在配置文件中的配置为我们生产一个对象

 

下面是汽车的抽象类:

 

public abstract class AbstractCar {

    // 每个汽车都能跑
    protected abstract void run();
}

 

汽车工厂与汽车之间的关系停留在抽象层间的依赖,这样做可以减少实现类之间的耦合,提高的代码的扩展性。

 

public class BenzCar extends AbstractCar {


    /**
     * 
     * @see com.huashao.chapter.chapter08.AbstractCar#run()
     */
    @Override
    protected void run() {

        System.out.println("奔驰生产成功");
    }

}

 

测试:

 

public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //初始化工厂,如果工长初始化时间很长,可以在项目启动创建
        AbstractCarFactory factory=new CarFactory();
        //生产奔驰汽车
        AbstractCar car=factory.createCar(BenzCar.class);
        //测试
        car.run();
    }

}

 

所谓工厂方法的灵活性就在于如果我想生存宝马汽车,我只需要修改

AbstractCar car=factory.createCar(BMWCar.class);

即可

  • 大小: 36.1 KB
分享到:
评论

相关推荐

    研磨设计模式之工厂方法模式.

    《研磨设计模式之工厂方法模式》是一本深入解析Java设计模式的专业书籍,特别是对工厂方法模式进行了详尽的探讨。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更加可读、可维护和可...

    JAVA设计模式之工厂方法模式

    ### JAVA设计模式之工厂方法模式 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的软件设计问题,提高代码的可维护性和复用性。面向对象的设计模式更是现代软件开发...

    C++的设计模式之工厂方法模式(Factory Method)

    C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)

    研磨设计模式之 工厂方法模式.doc

    研磨设计模式之 工厂方法模式.doc

    23钟设计模式之工厂方法模式

    工厂方法模式是设计模式中的一种,它遵循面向对象设计原则,主要是为了实现“开闭原则”,即对扩展开放,对修改关闭。工厂方法模式通过引入一个抽象工厂来定义产品的创建过程,具体的创建过程则由其子类来实现,从而...

    Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式。分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其...

    java设计模式之工厂模式

    java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...

    设计模式——工厂方法模式

    工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...

    设计模式之工厂方法、简单工厂、抽象工厂

    这三种工厂模式的共同之处在于它们都为对象的创建提供了抽象层,隐藏了具体的实例化过程。然而,它们之间的区别在于灵活性和抽象程度: - 工厂方法模式提供了一种定义抽象接口的方法,让子类来决定具体实例化哪个类...

Global site tag (gtag.js) - Google Analytics