设计模式——工厂模式
来源:互联网 发布:逻辑回归算法概念 编辑:程序博客网 时间:2024/06/03 20:18
定义
定义一个用于创建对象的接口,让子类去决定实例化哪个类
使用场景
在任何需要生成复杂的对象的地方我们都可以使用工厂模式。复杂对象适合工厂模式,如果是直接new操作就可以创建的对象就无需使用了
UML图
图1表示的是简单工厂模式,我们没有创建抽象工厂类,因为有时候我们只需要一个工厂。但是如果有时候我们需要多个工厂来生成不同的产品就会使用到图2。
示例
抽象产品类:
public abstract class Product { /** * 产品类的抽象方法 * 具体的产品类实现具体的方法 */ public abstract void method();}
具体产品类A:
public class ConcreteProductA extends Product{ /** * 实现产品类的抽象方法 */ @Override public void method() { System.out.println("这是具体的产品A"); } //产品A的其他方法... public void ProductA(){ }}
具体产品类B:
public class ConcreteProductB extends Product{ /** * 实现产品类的抽象方法 */ @Override public void method() { System.out.println("这是具体的产品B"); } //产品B的其他方法... public void ProductB(){ }}
抽象工厂类:
public abstract class Factory { /** * 抽象工厂方法 * 具体实现由子类实现 * @return 具体的产品对象 */ public abstract Product createProduct();}
具体工厂类A:
public class ConcreteFactoryA extends Factory{ @Override public Product createProduct() { return new ConcreteProductA(); }}
具体工厂类B:
public class ConcreteFactoryB extends Factory { @Override public Product createProduct() { return new ConcreteProductB(); }}
客户类:
public class Client { public static void main(String[] args) { Factory factoryA=new ConcreteFactoryA(); Product productA=factoryA.createProduct(); productA.method(); Factory factoryB=new ConcreteFactoryB(); Product productB=factoryB.createProduct(); productB.method(); }}
上面示例的几个角色都很简单,只有分为四大模块:
一是抽象工厂,为工厂模式的核心;
二是具体工厂,实现了具体的工厂业务逻辑;
三是抽象产品,是工厂模式所创建的产品的父类;
四是具体产品,实现抽象产品的某个具体产品的对象;
在Client类中我们分别创建不同的具体工厂类,并且通过具体工厂类的对象生成了具体的产品对象。这种需要哪个产品就生产哪一个比较常见,我在书上还看到有利用反射的方式来更加简洁的生成具体的产品对象。
0 0
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 设计模式——工厂设计模式
- Java设计模式—工厂设计模式
- 设计模式——抽象工厂模式、工厂方法模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Ubuntu 切换至root用户命令补全不完整 问题
- 去除内联元素之间的间距
- 单点登录:HTTPS相关知识
- Android 根据sql文件创建数据库并插入数据
- maven中pom文件解析
- 设计模式——工厂模式
- 比较器Comparator 和 Comparable的简单区别
- java项目怎么打成可运行的jar包
- 学习一下 冒泡排序
- LVS+Keepalived负载均衡配置部署
- 网络图片下载到本地相册
- Mac终端多窗口tmux
- QT中定义类,类中自定义的结构体,但是编译报错说这个结构体未声明
- ubuntu上用apt安装php7.1的扩展