设计模式之简单工厂、工厂方法模式、抽象工厂模式
来源:互联网 发布:端口是什么 怎么查看 编辑:程序博客网 时间:2024/06/10 21:14
设计模式之简单工厂、工厂方法模式、抽象工厂模式
这里讲三种模式放在一起说明,是因为三种模式关联性很强——抽象工厂模式简单化以后就是工厂方法模式,工厂方法模式再简单化就是简单工厂模式(简单工厂模式并没有被列入到GOF的设计模式中)。
1.定义:
简单工厂:提供一个创建对象实例的功能,而无需关心其具体的实现。被创建的实例的类型可以是接口、抽象类,也可以是具体的类。
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
抽象工厂模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。
2.uml类图
- 简单工厂
工厂方法模式
抽象工厂方法模式
3.代码
- 简单工厂
public class SimpleFactory { public static void main(String[] args) { //通过简单工厂来获取具体的产品实例 Productor p = Factory.createrProductor(0); p.show(); }}//简单工厂类,实现创建产品对象class Factory{ /** * 创建产品对象的方法 * @param code 传入需要创建的产品对应的信息 * @return 需要创建的产品实例 */ public static Productor createrProductor(int code){ Productor productor = null; switch (code) { case 0: productor = new ProductorA(); break; case 1: productor = new ProductorB(); break; default: new Throwable("productor is undefined"); break; } return productor; }}//产品接口interface Productor{ public void show();}//具体产品的对象class ProductorA implements Productor{ @Override public void show() { System.out.println("this is ProductorA"); }}//具体产品的对象class ProductorB implements Productor{ @Override public void show() { System.out.println("this is ProductorB"); }}
- 工厂方法模式:就是将简单工厂方法中,实现产品对象的方法不在工厂类中完成,而是在工厂类的子类中完成,让子类决定怎么完成产品对象的创建。
public class FactoryMethod { public static void main(String[] args) { // TODO Auto-generated method stub Factory f = new FactoryA(); f.operator(); }}//工厂类,实现产品的展示abstract class Factory{ public void operator(){ Productor productor = createProductor(); productor.show(); } //抽象工厂方法,子类决定实例化那个产品 protected abstract Productor createProductor();}//A产品的工厂class FactoryA extends Factory{ //实现A产品的实例的工厂方法 @Override protected Productor createProductor() { return new ProductorA(); }}//B产品的工厂class FactoryB extends Factory{ //实现B产品的实例的工厂方法 @Override protected Productor createProductor() { return new ProductorB(); }}//产品接口interface Productor{ public void show();}//具体产品的对象class ProductorA implements Productor{ @Override public void show() { System.out.println("this is ProductorA"); }}//具体产品的对象class ProductorB implements Productor{ @Override public void show() { System.out.println("this is ProductorB"); }}
- 抽象工厂模式:抽象工厂模式是在工厂方法模式的基础上增加了系列产品的概念。比如现在有产品A、B,然后每个产品都有一个A1、A2和B1、B2。现在有个需求,产品x1是一个系列、产品x2是一个系列,而且不能混合,这样的话就需要将工厂方法拓展下,拓展成生产产品系列1的工厂和生产产品系列2的工厂,各个工厂负责各自系列的产品生产。
public class AbstractFactory { public static void main(String[] args) { Factory f = new Serial_1Factory(); AssembleSerial as = new AssembleSerial(); as.showSerial(f); }}//抽象工厂接口interface Factory{ public ProductorA createA(); public ProductorB createB();}//组合产品系列的类class AssembleSerial{ public void showSerial(Factory f){ ProductorA pa = f.createA(); ProductorB pb = f.createB(); pa.show(); pb.show(); }}//产品系列1的抽象工厂class Serial_1Factory implements Factory{ //创建产品系列1的产品A @Override public ProductorA createA() { return new ProductorA1(); } //创建产品系列1的产品B @Override public ProductorB createB() { return new ProductorB1(); }}//产品系列2的抽象工厂class Serial_2Factory implements Factory{ //创建产品系列2的产品A @Override public ProductorA createA() { return new ProductorA2(); } //创建产品系列2的产品B @Override public ProductorB createB() { return new ProductorB2(); }}//产品A的接口interface ProductorA{ public void show();}//产品B的接口interface ProductorB{ public void show();}//产品系列1中的产品A类class ProductorA1 implements ProductorA{ @Override public void show() { System.out.println("this is ProductorA of serial_1"); }}//产品系列2中的产品A类class ProductorA2 implements ProductorA{ @Override public void show() { System.out.println("this is ProductorA of serial_2"); }}//产品系列1中的产品B类class ProductorB1 implements ProductorB{ @Override public void show() { System.out.println("this is ProductorB of serial_1"); }}//产品系列2中的产品B类class ProductorB2 implements ProductorB{ @Override public void show() { System.out.println("this is ProductorB of serial_2"); }}
阅读全文
0 0
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式理解之工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- 设计模式之-简单工厂、工厂方法、抽象工厂
- 设计模式之简单工厂/工厂方法/抽象工厂
- 设计模式学习之简单工厂、工厂方法、抽象工厂
- 设计模式之工厂方法、简单工厂、抽象工厂
- 设计模式之简单工厂、工厂方法和抽象工厂
- 设计模式之简单工厂、工厂方法和抽象工厂
- 设计模式之简单工厂、工厂方法、抽象工厂
- pygame游戏之旅12:调用按钮实现游戏开始功能
- Java反转一个ArrayList
- MySQL常用查询
- android:windowSoftInputMode属性详解
- springmvc请求参数获取的几种方法
- 设计模式之简单工厂、工厂方法模式、抽象工厂模式
- Android中常用的设计模式——单例模式
- Spring Boot学习笔记之数据库访问
- C++输出int,float,double
- Shell根据给定路径读取其中的文件并输出到指定的路径
- HDU 2196 Computer——树形dp
- SpringMVC框架(一)
- WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制
- Javaweb的博客系统