设计模式之三种工厂模式
2019-06-17 本文已影响0人
先生zeng
今天接着更新工厂模式。概念性的东西因为我书里的笔记还在宿舍,所以先把代码贴一下。我自己又重温了一遍工厂模式的学习。
首先是最简单的简单工厂模式
![](https://img.haomeiwen.com/i4017523/2c6860478cc1a3b3.png)
代码如下:
工厂类:
/**
* @version 2019/1/21
* @description: 工厂,给我产品名,我就自己去生产这个产品
* @since 2019/1/21
*/
public class CreatorFactory {
public static FruitProduct createFruit(String which) throws NoSuchFruitException {
if(which.equalsIgnoreCase("grape")){
return new Grape();
}else if(which.equalsIgnoreCase("apple")){
return new Apple();
}else{
throw new NoSuchFruitException("没有找到该产品类,进行生产");
}
}
}
产品继承的抽象类
/**
* @version 2019/1/21
* @description:产品继承的抽象类
* @since 2019/1/21
*/
public interface FruitProduct {
/** 种植 */
void plant();
/** 浇水、施肥 */
void grow();
/** 收获 */
void harvest();
}
接下来是选水果中的其中一个产品:
/**
* @version 2019/1/21
* @description:苹果类
* @since 2019/1/21
*/
public class Apple implements FruitProduct {
//构造器
public Apple() {
plant();
grow();
harvest();
}
/**
* description: 种植
* @date 2019/1/21 17:03
* @param: []
* @return void
**/
@Override
public void plant() {
System.out.println("播种苹果种子");
}
/**
* description:生长
* @date 2019/1/21 17:03
* @param: []
* @return void
**/
@Override
public void grow() {
System.out.println("苹果正在茁壮成长。。。。");
}
/**
* description: 收获
* @author 曾鑫曜 (xinyao.zeng@ucarinc.com)
* @date 2019/1/21 17:03
* @param: []
* @return void
**/
@Override
public void harvest() {
System.out.println("苹果成熟了,可以收获了!!!");
}
}
测试类:
public class TestStaticFactory1 {
public static void main(String[] args) throws NoSuchFruitException {
/** 调用工厂生产苹果*/
CreatorFactory.createFruit("apple");
/** 调用工厂生产葡萄 */
CreatorFactory.createFruit("grape");
/** 调用工厂生产不存在的水果,报异常 */
CreatorFactory.createFruit("gr22ape");
}
}
结果演示:
![](https://img.haomeiwen.com/i4017523/9f2cf77c0b3840e3.png)
接着是工厂方法模式:
代码类图解:![](https://img.haomeiwen.com/i4017523/170f211b5db07dd6.png)
代码演示:
生产水果的抽象工厂接口
public interface FruitFactory {
public FruitProduct createFruit();
}
同样需要一个产品共同的抽象(同上)
public interface FruitProduct {
/** 种植 */
void plant();
/** 浇水、施肥 */
void grow();
/** 收获 */
void harvest();
}
提供一个专门生产类:
public class GrapeCreate implements FruitFactory {
@Override
public FruitProduct createFruit() {
return new Grape();
}
}
public class AppleCreate implements FruitFactory {
@Override
public FruitProduct createFruit() {
return new Apple();
}
测试类:
public class TestFactoryMethod {
private static FruitFactory appleCreate,grapeCreate;
private static FruitProduct apple,grape;
public static void main(String[] args) {
appleCreate=new AppleCreate();
grapeCreate=new GrapeCreate();
apple=appleCreate.createFruit();
System.out.println("");
grape=grapeCreate.createFruit();
}
}
![](https://img.haomeiwen.com/i4017523/337498e5cb4fc723.png)
抽象工厂模式:
类图:![](https://img.haomeiwen.com/i4017523/849f5fab0f90e317.png)
代码如下:
待续。。。。