java抽象工厂模式简单实例

  • 格式:pdf
  • 大小:67.35 KB
  • 文档页数:4

java抽象⼯⼚模式简单实例

抽象⼯⼚模式:提供⼀个创建⼀系列的相关的或者依赖的对象的接⼝,⽆需指定它们的具体实现类,具体的时间分别在⼦类⼯⼚中产⽣。

类似于⼯⼚模式:隔离了具体类的⽣产实现,使得替换具体的⼯⼚实现类很容易。包含有以下模块:

1.抽象产品接⼝:定义产品的接⼝,公共的暴露⽅法。便于实际的产品类实现。

2.具体的产品类:包含实际产品的类的逻辑处理:

3.抽象⼯⼚接⼝:定义产⽣系列对象的接⼝

4.具体的⼯⼚实现:实现抽象的接⼝⼯⼚,返回具体的产品类的实现。

下⾯是具体的代码⽰例:

1.抽象的产品接⼝,定义了Car 和 IBreakFast

package factory.simple;

/**

* 抽象产品⾓⾊ 交通⼯具接⼝

*

* @author lilin

*

*/

public interface Car {

/**

* 上班函数

*/

void gotowork();

}

package factory.abstractfactory;

/**

* @author lilin

*

*/

public interface IBreakFast {

/**

* 吃早餐

*/

void eat();

}

2.定义具体的产品类的实现:

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("坐公交车去上班!");

}

}

/**

*

*/

package factory.abstractfactory;

/**

* @author lilin

*

*/

public class Milk implements IBreakFast {

@Override

public void eat() {

System.out.println("喝⽜奶!");

}

}

/**

*

*/

package factory.abstractfactory;

/**

* @author lilin

*

*/

public class Orange implements IBreakFast {

@Override

public void eat() {

System.out.println("吃橘⼦!");

}

}

3.定义好抽象的⼯⼚接⼝,⼀系列的获取实例的接⼝⽅法:

/**

*

*/

package factory.abstractfactory;

import factory.simple.Car;

/**

* @author lilin

*

*/

public interface IAbstractFactory {

/**

*

* @return

*/

Car getCar();

/**

*

*/

IBreakFast getBreakFast();

}

4.定义具体的⼯⼚⽣产类,具体的产品实例返回。

/**

*

*/

package factory.abstractfactory;

import factory.simple.Bike;

import factory.simple.Car;/**

* @author lilin

*

*/

public class LowPersonFactory implements IAbstractFactory {

@Override

public Car getCar() {

return new Bike();

}

@Override

public IBreakFast getBreakFast() {

return new Orange();

}

}

/**

*

*/

package factory.abstractfactory;

import factory.simple.Bus;

import factory.simple.Car;

/**

* @author lilin

*

*/

public class HighPersonFactory implements IAbstractFactory {

@Override

public Car getCar() {

return new Bus();

}

@Override

public IBreakFast getBreakFast() {

return new Milk();

}

}

最后,通过testNG简单测试下,抽象⼯⼚模式的实现:代码如下:

/**

*

*/

package factory.abstractfactory;

import org.testng.annotations.Test;

import factory.simple.Car;

/**

* @author lilin

*

*/

public class AbstractFactoryTest {

@Test

public void test() {

IAbstractFactory factory = new LowPersonFactory();

Car car = factory.getCar();

IBreakFast breakFast = factory.getBreakFast();

System.out.println("吃的早饭是:");

breakFast.eat();

System.out.println("上班交通⼯具是:");

car.gotowork();

IAbstractFactory factory2 = new HighPersonFactory();

car = factory2.getCar();

breakFast = factory2.getBreakFast();

System.out.println("吃的早饭是:");

breakFast.eat();

System.out.println("上班交通⼯具是:");

car.gotowork();

}}

这样使⽤过程城中,只要注⼊抽象的⼯⼚接⼝,具体的产品的产⽣,会在实际的⼦类⼯⼚类中产⽣,也可以随意的添加和修改实际⼦类⼯⼚

类,⽽不需要改变既有的代码设计。

抽象⼯⼚⽅法:⼀般常常使⽤于⼀套程序,需要多套实现的场景之下。