工厂模式和抽象工厂模式
工厂模式: 定义一个用于创建对象的接口,让他的子类决定实例化哪个类.使类的实例化延迟到子类.
1.普通的工厂模式:
public class GoodProduct implements Product {
private String prodInfo = "Iam the good prod";
public String getProductInfo() {
// TODO Auto-generated method stub
return this.prodInfo;
}
public void setProdInfo(String prodInfo) {
// TODO Auto-generated method stub
this.prodInfo = prodInfo;
}
}
public class BadProduct implements Product {
public String getProductInfo() {
// TODO Auto-generated method stub
return "Iam the bad product";
}
public void setProdInfo(String prodInfo) {
// TODO Auto-generated method stub
}
}
public class ProdCreator implements Creator {
public <t extends Product> t getProd(Class<t> c) {
// TODO Auto-generated method stub
t ret = null;
try {
ret = (t) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
return ret;
}
}
}
2。多个工厂的工厂模式:
public class BadProdCreator {
public Product getProd(){
return new BadProduct();
}
}
goodProdCreator 同理。
调用方法:
public static void main(String[] args) {
// TODO Auto-generated method stub
ProdCreator pc = new ProdCreator();
GoodProduct gp = pc.getProd(GoodProduct.class);
System.out.println(gp.getProductInfo());
BadProduct bp = pc.getProd(BadProduct.class);
System.out.println(bp.getProductInfo());
gp = SimpleCreator.getProd(GoodProduct.class);
bp = SimpleCreator.getProd(BadProduct.class);
System.out.println(gp.getProductInfo());
System.out.println(bp.getProductInfo());
BadProdCreator bpc = new BadProdCreator();
System.out.println(bpc.getProd().getProductInfo());
}
抽象工厂模式:为创建一组相关或者相互依赖的对象提供接口,无需指定具体的类。
public class GoodLargeProd extends AbstractGoodProd{
public String getProductInfo() {
// TODO Auto-generated method stub
return "I am good large Prod";
}
public void setProdInfo(String prodInfo) {
// TODO Auto-generated method stub
}
}
public abstract class abstractCreator {
public abstract Product getLargeProduct();
public abstract Product getSmallProduct();
}
public class GoodProdCreator extends abstractCreator {
@Override
public Product getLargeProduct() {
// TODO Auto-generated method stub
return new GoodLargeProd();
}
@Override
public Product getSmallProduct() {
// TODO Auto-generated method stub
return new GoodSmallProd();
}
}
说明的一点是: 抽象工厂模式(以上面的例子来说)扩充产品的small,large等需要改abstractcreator 的接口,但加个badprod等就比较方便。
用工厂模式的creator 也可以创建对象。
public class GoodProdNormalCreator implements Creator {
public <t extends Product> t getProd(Class<t> c) {
// TODO Auto-generated method stub
t ret = null;
try {
ret = (t)Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
return ret;
}
}
}
这样可以创建任何的prod的之类(报错多级子类)。
转载于:https://www.cnblogs.com/thinkqin/p/3807155.html
工厂模式和抽象工厂模式相关推荐
- 工厂方法模式和抽象工厂模式
工厂方法模式和抽象工厂模式 工厂方法模式 抽象工厂模式 总结: 工厂方法模式 #include <string> #include <iostream>// Abstract ...
- 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细
1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- 021 设计模式之工厂方法模式,抽象工厂模式的区别
简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...
- 设计模式之工厂模式和抽象工厂
设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...
- [设计模式篇]工厂模式和抽象工厂模式
最近在看Head First的Design Pattern,想想去年候捷来学校给我们讲Design Pattern,但当时水平太弱根本听不懂,今年想趁机再好好学一波,候捷反而不来了,哎,人生就是这样, ...
- java抽象工厂模式_Java 抽象工厂模式
Java设计模式 - 抽象工厂模式 抽象工厂模式是另一个创建模式. 抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂. 当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建 ...
- 设计模式理解:工厂模式,抽象工厂,原型方法
工厂模式.抽象工厂.原型方法都是对象创建型模式.工厂模式的目的是利用抽象类去动态地创建对象:抽象工厂模式是利用抽象类动态地创建一系列的对象:而原型方法是通过克隆(深拷贝)地形式创建出对象 ,再去操作新 ...
- 回顾游戏中的设计模式:策略模式vs抽象工厂
最近有时间看看设计模式方面的书,好多东西时间久了不看就变得生疏起来, 在这里会抽出时间把自己在工作中使用过的设计模式做下总结. 刚才在看到别人说,简单工厂模式是"通过提供单独的一个类,来实现 ...
- 创建型模式:抽象工厂
个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...
最新文章
- to_excel() got an unexpected keyword argument ‘sheetname‘
- WSL based ubuntu和docker的文件迁移
- jq步骤条 java_JQuery实现步骤条效果(上一步,下一步)
- 微信小程序数据拼接_微信小程序用户数据解密算法Java版
- Breaking the Ledger Security Model
- POJ 2808 校门外的树
- 使用express、react、webpack打包、socket.io、mongodb、ant.design、less、es6实现聊天室
- 静态成员函数与成员变量_C++静态成员变量及函数
- Python工作笔记006---在centos命令行里进入和退出Python程序
- JZOJ 1236. 邦德I
- mybatis plus 日志打印_Mybatis-plus常用API全套教程,看完没有不懂的
- C++ Segmentation fault 一般原因
- Android的双进程守护,广播和双进程
- Python3_tuple
- hping3 使用 (构造dos攻击)
- [洛谷] P3174 [HAOI2009]毛毛虫 (树形dp 树的最长直径的扩展)
- Ubuntu16.04 cp xorg.conf.failsafe xorg.conf后无法设置分辨率的解决办法
- 《领域驱动设计 DDD》核心知识梳理笔记
- 我的世界服务器皮肤文件夹在哪里,我的世界青龙皮肤文件,启动侠皮肤文件夹在哪个文件夹...
- 服务器及电脑主机系统安全加固操作手册
热门文章
- java并发编程(6)--CAS会导致“ABA问题“ 解决方案
- 比特币 POW 白皮书 区块篡改成功的概率 代码 注释详解
- php x不能转移,[PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点
- 桂电管理科学可以转计算机,去年调到桂电计算机的感言,希望对各研友有帮助...
- ccfcsp化学方程式java_化学方程式-ccf
- 二十一、Oracle学习笔记:编写函数和触发器
- TCP 粘包/拆包说明 及 异常案例
- c# 如何抓微信把柄_抓住把柄表情包 - 抓住把柄微信表情包 - 抓住把柄QQ表情包 - 发表情 fabiaoqing.com...
- hdu6715 算术 2019百度之星初赛3-1003
- 阶段3 3.SpringMVC·_05.文件上传_3 文件上传之Springmvc方式上传原理分析