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

设计模式之工厂模式

时间:2017-08-13 16:23:27      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:获取   print   创建   结果   调用   工厂方法   模式   return   span   

工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。

目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。

工厂方法模式包含四个部分:

1.抽象产品:产品对象同一的基类,或者是同一的接口。

2.具体的产品:各个不同的实例对象类

3.抽象工厂:所有的子类工厂类的基类,或是同一的接口

4.具体的工厂子类:负责每个不同的产品对象的实际创建

 

具体的实例代码:

1.抽象的产品类:定义car  交通工具类下:

技术分享
package factory.simple;

/**
 * 抽象产品角色 交通工具接口
 * 
 * @author lilin
 * 
 */
public interface Car {

    /**
     * 上班函数
     */
    void gotowork();

}
技术分享

2.定义实际的产品类,总共定义两个,bike 和bus 分别表示不同的交通工具类

技术分享
package factory.simple;

/**
 * 具体产品角色,自行车
 * 
 * @author lilin
 * 
 */
public class Bike implements Car {
    @Override
    public void gotowork() {
        System.out.println("骑自行车去上班!");
    }

}
技术分享

 

技术分享
package factory.simple;

/**
 * @author lilin
 * 
 */
public class Bus implements Car {

    @Override
    public void gotowork() {
        System.out.println("坐公交车去上班!");
    }

}
技术分享

 

3.抽象的工厂接口定义如下:、

技术分享
/**
 * 
 */
package factory.factory;

import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public interface ICarFactory {

    /**
     * 获取交通工具
     * 
     * @return
     */
    Car getCar();

}
技术分享

 

4.具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类:

技术分享
/**
 * 
 */
package factory.factory;

import factory.simple.Bike;
import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public class BikeFactory implements ICarFactory {

    @Override
    public Car getCar() {
        return new Bike();
    }

}
技术分享

 

技术分享
/**
 * 
 */
package factory.factory;

import factory.simple.Bus;
import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public class BusFactory implements ICarFactory {

    @Override
    public Car getCar() {
        return new Bus();
    }

}
技术分享

最后,使用简单的测试类,来验证下 不同的工厂能够产生不同的产品对象:测试类如下:

技术分享
/**
 * 
 */
package factory.factory;

import org.testng.annotations.Test;

import factory.simple.Car;

/**
 * @author lilin
 * 
 */
public class TestFactory {

    @Test
    public void test() {
        ICarFactory factory = null;
        // bike
        factory = new BikeFactory();
        Car bike = factory.getCar();
        bike.gotowork();

        // bus
        factory = new BusFactory();
        Car bus = factory.getCar();
        bus.gotowork();
    }

}
技术分享

打印结果如下:

骑自行车去上班!
坐公交车去上班!

 

工厂模式,可以理解为:有了很多个工厂方法,自己需要哪一个产品,就调用当前产品的工厂方法,获取相应的具体实例。

设计模式之工厂模式

标签:获取   print   创建   结果   调用   工厂方法   模式   return   span   

原文地址:http://www.cnblogs.com/eryun/p/7353492.html

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