Java设计模式编程中简单工厂与抽象工厂模式的使用实例
更新时间:2016年04月21日 09:56:51 作者:匆忙拥挤repeat
这篇文章主要介绍了Java设计模式编程中简单工厂与抽象工厂模式的使用实例,简单工厂与抽象工厂都可以归类于设计模式中的创建型模式,需要的朋友可以参考下
简单工厂模式
类图
通过一个工厂类,以一个条件来创建对应的对象
//业务功能 public interface ICalculation { double getResult(double numA, double numB); } public class CalcAdd implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("加法"); return numA + numB; } } public class CalcSubtract implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("减法"); return numA - numB; } } /* * 简单工厂模式 关注:对象的创建 * 建立一个工厂类,对实现了同一接口的或者是存在继承关系的一些类进行实例的创建 */ public class Test4Simple { public static void main(String[] args) { // String operation = "/"; String operation = "+"; // String operation = "-"; // String operation = "*"; double numA = 182, numB = 33; ICalculation createCalc = CalcSimpleFactory.createCalc(operation); double result = createCalc.getResult(numA, numB); System.out.println(result); } }
简单工厂的缺陷: 简单工厂创建产品时需要传递相应的参数,如果传递不正确就取不到对象了。
改进:多方法创建不同产品
类图
public class CalcMultipleFactory { public static ICalculation produceAdd() { return new CalcAdd(); } public static ICalculation produceSubtract() { return new CalcSubtract(); } public static ICalculation produceMultiply() { return new CalcMultiply(); } public static ICalculation produceDivide() { return new CalcDivide(); } } public class Test4Multiple { public static void main(String[] args) { double numA = 182, numB = 33; ICalculation createCalc = CalcMultipleFactory.produceAdd(); double result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceSubtract(); result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceMultiply(); result = createCalc.getResult(numA, numB); System.out.println(result); createCalc = CalcMultipleFactory.produceDivide(); result = createCalc.getResult(numA, numB); System.out.println(result); } }
抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:具体的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现具体功能,或派生
类图
//抽象产品1 public interface IProduct1 { public void show(); } //抽象产品2 public interface IProduct2 { public void show(); } //实体产品1 public class Product1 implements IProduct1 { public void show() { System.out.println("创建了1型产品"); } } //实体产品2 public class Product2 implements IProduct2 { public void show() { System.out.println("创建了2型产品"); } } /* * 1A 1B属于Product1 同一产品等级结构中 * 2A 2B属于Product2 */ public class GradeProduct1A extends Product1 { @Override public void show() { super.show(); System.out.println("这是产品1下的:产品A"); } } public class GradeProduct1B extends Product1 { @Override public void show() { super.show(); System.out.println("这是产品1下的:产品B"); } } public class GradeProduct2A extends Product2 { @Override public void show() { super.show(); System.out.println("这是产品2下的:产品A"); } } public class GradeProduct2B extends Product2 { @Override public void show() { super.show(); System.out.println("这是产品2下的:产品B"); } } //抽象工厂 创建不同的抽象产品 public interface IFactory { public IProduct1 createProduct1A();//1类产品 型号A public IProduct1 createProduct1B();//1类产品 型号B public IProduct2 createProduct2A();//2类产品 型号A public IProduct2 createProduct2B();//2类产品 型号B } //实体工厂 创建实体产品,返回类型为抽象产品 public class Factory implements IFactory { public IProduct1 createProduct1A() { return new GradeProduct1A(); } public IProduct1 createProduct1B() { return new GradeProduct1B(); } public IProduct2 createProduct2A() { return new GradeProduct2A(); } public IProduct2 createProduct2B() { return new GradeProduct2B(); } } /* * 抽象工厂模式:用来创建一组相关或者相互依赖的对象 * * 流程:抽象工厂,实体工厂 生产产品 * 抽象产品,实体产品 实现产品功能 * 缺点:当需要增加一个产品(由抽象和实体构成),工厂都需要更改 */ public class Test4Abstract { public static void main(String[] args) { IFactory factory = new Factory(); IProduct1 product1a = factory.createProduct1A(); product1a.show(); IProduct1 product1b = factory.createProduct1B(); product1b.show(); IProduct2 product2a = factory.createProduct2A(); product2a.show(); IProduct2 product2b = factory.createProduct2B(); product2b.show(); } }
您可能感兴趣的文章:
- Java创建型设计模式之抽象工厂模式(Abstract Factory)
- Java设计模式之抽象工厂模式浅析讲解
- Java设计模式之抽象工厂模式(Abstract Factory)
- Java 深入理解创建型设计模式之抽象工厂模式
- 深入理解Java设计模式之抽象工厂模式
- Java设计模式之简单工厂 工厂方法 抽象工厂深度总结
- Java设计模式之抽象工厂模式详解
- Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】
- Java设计模式之抽象工厂模式
- Java设计模式笔记之抽象工厂代码示例
- Java设计模式之抽象工厂模式实例详解
- Java设计模式编程中的工厂方法模式和抽象工厂模式
- Java设计模式之工厂方法和抽象工厂
相关文章
Spring MVC-@RequestMapping注解详解
@RequestMapping注解的作用,就是将请求和处理请求的控制器方法关联起来,建立映射关系。这篇文章主要给大家介绍了关于SpringMVC中@RequestMapping注解用法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2023-04-04Mybatis中一条SQL使用两个foreach的问题及解决
这篇文章主要介绍了Mybatis中一条SQL使用两个foreach的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-02-02快速解决VS Code报错:Java 11 or more recent is required to run. Ple
这篇文章主要介绍了快速解决VS Code报错:Java 11 or more recent is required to run. Please download and install a recent JDK的相关资料,需要的朋友可以参考下2020-09-09基于Java反射的map自动装配JavaBean工具类设计示例代码
这篇文章主要给大家介绍了关于基于Java反射的map自动装配JavaBean工具类设计的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起看看吧2018-10-10
最新评论