1. class Mouse{
  2. public void sayHi(){};
  3. }
  4.  
  5. class DellMouse extends Mouse {
  6. @Override
  7. public void sayHi() {
  8. System.out.println("产品:戴尔鼠标");
  9. }
  10. }
  11. class HpMouse extends Mouse {
  12. @Override
  13. public void sayHi() {
  14. System.out.println("产品:惠普鼠标");
  15. }
  16. }
  17.  
  18. class KeyBoard {
  19. public void kick(){};
  20. }
  21. class HpKeyBoard extends KeyBoard {
  22. @Override
  23. public void kick() {
  24. System.out.println("产品:惠普键盘");
  25. }
  26. }
  27. class DellKeyBoard extends KeyBoard {
  28. @Override
  29. public void kick() {
  30. System.out.println("产品:戴尔键盘");
  31. }
  32. }
  33. //总的工厂接口
  34. interface PcFactory {
  35. public Mouse createMouse() ;
  36. public KeyBoard createKeyBoard() ;
  37. }
  38. class HpFactory implements PcFactory {
  39. @Override
  40. public Mouse createMouse() {
  41. return new HpMouse();
  42. }
  43.  
  44. @Override
  45. public KeyBoard createKeyBoard() {
  46. return new HpKeyBoard();
  47. }
  48. }
  49. class DellFactory implements PcFactory {
  50. @Override
  51. public Mouse createMouse() {
  52. return new DellMouse();
  53. }
  54. @Override
  55. public KeyBoard createKeyBoard() {
  56. return new DellKeyBoard();
  57. }
  58. }
  59.  
  60. //当需要增加一个华硕工厂时:
  61. class AsusMouse extends Mouse {
  62. @Override
  63. public void sayHi() {
  64. System.out.println("产品:华硕鼠标");
  65. }
  66. }
  67. class AsusKeyBoard extends KeyBoard {
  68. @Override
  69. public void kick() {
  70. System.out.println("产品:华硕键盘");
  71. }
  72. }
  73. class AsusFactory implements PcFactory {
  74. @Override
  75. public Mouse createMouse() {
  76. return new AsusMouse();
  77. }
  78. @Override
  79. public KeyBoard createKeyBoard() {
  80. return new AsusKeyBoard();
  81. }
  82. }
  83.  
  84. public class NormFactory {
  85. public static void main(String[] args) {
  86. PcFactory hpFact = new HpFactory();
  87. Mouse hpm = hpFact.createMouse();
  88. KeyBoard hpkbd = hpFact.createKeyBoard();
  89.  
  90. PcFactory dellFact = new DellFactory();
  91. Mouse dellm = dellFact.createMouse();
  92. KeyBoard dellkbd = dellFact.createKeyBoard();
  93.  
  94. hpm.sayHi();
  95. dellm.sayHi();
  96.  
  97. hpkbd.kick();
  98. dellkbd.kick();
  99. }
  100. }

打印结果如下:

  1. 产品:惠普鼠标
  2. 产品:戴尔鼠标
  3. 产品:惠普键盘
  4. 产品:戴尔键盘

java-工厂的更多相关文章

  1. java工厂模式

    (1)概念大白话:java工厂模式就是客户端(main函数)要创建对象觉得麻烦就让另外一个叫工厂的类帮它创建,然后自己每次要创建对象就叫工厂帮它弄,举个例子,在没有工厂这个"手下" ...

  2. java工厂类与反射机制

    java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅     简单工厂模式需要由以下角色组成: 接口    ...

  3. Java工厂模式解耦 —— 理解Spring IOC

    Java工厂模式解耦 -- 理解Spring IOC 最近看到一个很好的思想来理解Spring IOC,故记录下来. 资源获取方式 主动式:(要什么资源都自己创建) 被动式:(资源的获取不是我们创建, ...

  4. Java学习笔记——Java工厂模式之简单工厂

    package com.app; import java.util.Date; /* * 工厂模式:简单工厂.工厂方法.抽象工厂 * * */ public class Test0718_Factor ...

  5. JAVA - 工厂模式

    1. 简单工厂违背OCP(Open Close Principle)原则 , 即对增加开放,对修改关闭.如果要符合OCP原则,要针对接口编程. //简单工厂模式,违反了OCP原则 public cla ...

  6. Java 工厂模式(一)— 抽象工厂(Abstract Factory)模式

    一.抽象工厂模式介绍: 1.什么是抽象工厂模式: 抽象工厂模式是所有形态的工厂模式中最为抽象和最具有一般性的一种形态,抽象工厂模式向客户端提供一个接口,使得客户端在不知道具体产品的情类型的情况下,创建 ...

  7. Java 工厂模式(一)— 简单工厂模式

    一.什么是工厂模式: Java中的工厂模式主要是用来将有大量共同接口的类实例化.工厂模式可以动态的决定将哪一个类实例化,不必事先知道要实例化哪个类,将类的实例化的主动权交给工厂而不是类本身.我们常见的 ...

  8. java 工厂模式 转载

    下面介绍三种设计模式,简单工厂模式,工厂方法模式,抽象工厂模式 思考如下场景: 有一天,林同学准备去买笔记本,他到商城发现有两款电脑他特别喜欢, 一款是 Macbook Pro, 另一款是 Surfa ...

  9. java工厂模式个人体会

    上一边文章主要对单例模式做了一个总结,这篇文章主要对工厂模式也写一写个人的体会. 工厂模式是设计模式的一种,它主要是把实现产品对象的过程封装起来,然后提供给客户端相应的接口.工厂模式也是有3种,分别为 ...

  10. 自己理解的java工厂模式,希望对大家有所帮助

    [http://www.360doc.com/content/11/0824/17/3034429_142983837.shtml] 这两天突然想学学java源代码,不过看到一篇文章说看java源代码 ...

随机推荐

  1. elastalert 基于EFK环境的邮件报警

    1.安装elastalert  安装的python必须是2.7以上的版本 安装的路径  /usr/local/src 安装依赖 yum -y install wget openssl openssl- ...

  2. JavaScript基础12——运动

    运动原理 运动的原理:      让某件物品沿着某种方向随着时间的变化改变位置 setInterval(function(){ obox.style.left = obox.offsetLeft+10 ...

  3. 8-ESP8266 SDK开发基础入门篇--编写串口上位机软件

    https://www.cnblogs.com/yangfengwu/p/11087558.html 咱用这个编写 ,版本都无所谓哈,只要自己有就可以,不同版本怎么打开 https://www.cnb ...

  4. Linux下的C++ socket编程实例

    阅读目录 基本的局域网聊天 客户端服务端双向异步聊天源码 局域网内服务端和有限个客户端聊天源码 完美异步聊天服务端和客户端源码 C++定时器 select异步代码 pthead多线程 服务端: 服务器 ...

  5. 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)

    query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...

  6. shell 文件的包含

    使用.或者source api.sh function intadd() { let data=$+$ echo $data } test.sh #!/bin/bash . api.sh read d ...

  7. ex2

    #include <stdio.h> int main() { int days; printf("输入一个整数: \n"); scanf("%d" ...

  8. prometheus(docker)安装和报警 -- nginx域名监控

    软件组件:prometheusalertmanagerprometheus-webhook-dingtalk nginx-vts-exporternginx (###--add-module=../n ...

  9. 为什么不要使用==比较Integer?

    比较Integer的时候,不要用==. 查看Integer的源码,如下: /** * Returns an {@code Integer} instance representing the spec ...

  10. [Beta]Scrum Meeting#5

    github 本次会议项目由PM召开,时间为5月10日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 改进界面 改进界面 b ...