工厂模式: 定义一个用于创建对象的接口,让他的子类决定实例化哪个类.使类的实例化延迟到子类.

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

工厂模式和抽象工厂模式相关推荐

  1. 工厂方法模式和抽象工厂模式

    工厂方法模式和抽象工厂模式 工厂方法模式 抽象工厂模式 总结: 工厂方法模式 #include <string> #include <iostream>// Abstract ...

  2. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  3. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  4. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

  5. 设计模式之工厂模式和抽象工厂

    设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...

  6. [设计模式篇]工厂模式和抽象工厂模式

    最近在看Head First的Design Pattern,想想去年候捷来学校给我们讲Design Pattern,但当时水平太弱根本听不懂,今年想趁机再好好学一波,候捷反而不来了,哎,人生就是这样, ...

  7. java抽象工厂模式_Java 抽象工厂模式

    Java设计模式 - 抽象工厂模式 抽象工厂模式是另一个创建模式. 抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂. 当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建 ...

  8. 设计模式理解:工厂模式,抽象工厂,原型方法

    工厂模式.抽象工厂.原型方法都是对象创建型模式.工厂模式的目的是利用抽象类去动态地创建对象:抽象工厂模式是利用抽象类动态地创建一系列的对象:而原型方法是通过克隆(深拷贝)地形式创建出对象 ,再去操作新 ...

  9. 回顾游戏中的设计模式:策略模式vs抽象工厂

    最近有时间看看设计模式方面的书,好多东西时间久了不看就变得生疏起来, 在这里会抽出时间把自己在工作中使用过的设计模式做下总结. 刚才在看到别人说,简单工厂模式是"通过提供单独的一个类,来实现 ...

  10. 创建型模式:抽象工厂

    个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...

最新文章

  1. to_excel() got an unexpected keyword argument ‘sheetname‘
  2. WSL based ubuntu和docker的文件迁移
  3. jq步骤条 java_JQuery实现步骤条效果(上一步,下一步)
  4. 微信小程序数据拼接_微信小程序用户数据解密算法Java版
  5. Breaking the Ledger Security Model
  6. POJ 2808 校门外的树
  7. 使用express、react、webpack打包、socket.io、mongodb、ant.design、less、es6实现聊天室
  8. 静态成员函数与成员变量_C++静态成员变量及函数
  9. Python工作笔记006---在centos命令行里进入和退出Python程序
  10. JZOJ 1236. 邦德I
  11. mybatis plus 日志打印_Mybatis-plus常用API全套教程,看完没有不懂的
  12. C++ Segmentation fault 一般原因
  13. Android的双进程守护,广播和双进程
  14. Python3_tuple
  15. hping3 使用 (构造dos攻击)
  16. [洛谷] P3174 [HAOI2009]毛毛虫 (树形dp 树的最长直径的扩展)
  17. Ubuntu16.04 cp xorg.conf.failsafe xorg.conf后无法设置分辨率的解决办法
  18. 《领域驱动设计 DDD》核心知识梳理笔记
  19. 我的世界服务器皮肤文件夹在哪里,我的世界青龙皮肤文件,启动侠皮肤文件夹在哪个文件夹...
  20. 服务器及电脑主机系统安全加固操作手册

热门文章

  1. java并发编程(6)--CAS会导致“ABA问题“ 解决方案
  2. 比特币 POW 白皮书 区块篡改成功的概率 代码 注释详解
  3. php x不能转移,[PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点
  4. 桂电管理科学可以转计算机,去年调到桂电计算机的感言,希望对各研友有帮助...
  5. ccfcsp化学方程式java_化学方程式-ccf
  6. 二十一、Oracle学习笔记:编写函数和触发器
  7. TCP 粘包/拆包说明 及 异常案例
  8. c# 如何抓微信把柄_抓住把柄表情包 - 抓住把柄微信表情包 - 抓住把柄QQ表情包 - 发表情 fabiaoqing.com...
  9. hdu6715 算术 2019百度之星初赛3-1003
  10. 阶段3 3.SpringMVC·_05.文件上传_3 文件上传之Springmvc方式上传原理分析