1.Java设计模式分类

1.1 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。

1.2 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。

1.3 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

2.简单(静态)模式

2.1 简单(静态)工厂:不通过 new 创建对象实例, 而是用一个静态方法来对外提供自身实例的方法,即为我们所说的静态工厂方法(Static factory method) ;举个栗子:通过输入球员号码来输出球员的描述,传统做法,if等判断再去逐个new出对象;这里使用简单工厂模式来实现:

2.1.1 设计抽象基类或者接口Player,

package org.ssm.java.designPattern.factory.simpleFactory;/** 抽象基类:球员模板* */
public abstract class Player {/*球员描述*/public abstract void desc();
}

2.1.2 实现类,具体的球员类

首先是曼巴科比:

package org.ssm.java.designPattern.factory.simpleFactory;import org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.WorksheetDocumentImpl;public class Kobe extends Player {@Overridepublic void desc() {System.out.println("曼巴科比,偏执好胜!");}}

其次是诗人麦迪:

package org.ssm.java.designPattern.factory.simpleFactory;public class Tmac extends Player {@Overridepublic void desc() {System.out.println("T-Macs麦迪,飘逸诗人!");}}

再者是詹皇勒布朗:

package org.ssm.java.designPattern.factory.simpleFactory;public class James extends Player {@Overridepublic void desc() {System.out.println("勒布朗·詹皇,出道即巅峰!");}}

最后是其他球员,路人甲:

package org.ssm.java.designPattern.factory.simpleFactory;public class otherPlayer extends Player {@Overridepublic void desc() {System.out.println("潜力新秀、角色球员?不重要的路人甲吧!");}}

2.1.3 准备就绪,关键时刻,你想看谁的描述都可以:创建简单工厂类

package org.ssm.java.designPattern.factory.simpleFactory;public class SimplePlayerFactory {/*勒布朗·詹姆斯*/public static final int NUM_23 = 23; /*特雷西·麦克格雷迪*/public static final int NUM_1 = 1;/*科比·布莱恩特*/public static final int NUM_24 = 24;public static Player createPlayer(int num) {switch (num) {case NUM_1:return new Tmac();case NUM_23:return new Kobe();case NUM_24:return new James();default:return new otherPlayer();}}public static void main(String[] args) {/*** 简单工厂模式*//*我要看麦迪的描述*/Player Tmac = SimplePlayerFactory.createPlayer(SimplePlayerFactory.NUM_1);Tmac.desc();/*我要看科比的描述*/Player kobe = SimplePlayerFactory.createPlayer(SimplePlayerFactory.NUM_23);kobe.desc();}
}

2.1.4 输出结果

2.1.5 总结:

1)球员类:抽象类+继承类;

2)工厂类:核心类,是一个具体的类,用来创建球员类实例;

3)优点:方便创建 同种类型接口产品 的 复杂对象;

4)不足:在扩展更多的球员类时,除了要创建具体的球员类以外,还要修改工厂类的实现方法createPlayer(),而且不同类型的对象创建也不适应;

3.工厂方法模式

3.1 工厂方法在简单工厂的基础上再包了一层工厂,所有的工厂都是此工厂的子类;而产生对象的类型由子类工厂决定。是不是有点绕?其实就是把创建科比的工作分到科比的工厂类。。。类推,不在由单一工厂类根据参数去统一创建,再看一下栗子:

3.2 先创建工厂基类

package org.ssm.java.designPattern.factory;/*工厂基类:球员工厂*/
public abstract class PlayerFractory {public abstract Player createPlayer();
}

3.3 具体的球员工厂类

package org.ssm.java.designPattern.factory;/*创建科比工厂类*/
public class KobePlayerFractory extends PlayerFractory {@Overridepublic Player createPlayer() {return new Kobe();}}
package org.ssm.java.designPattern.factory;/*创建麦迪工厂*/
public class TmacPlayerFractory extends PlayerFractory {@Overridepublic Player createPlayer() {return new Tmac();}}
package org.ssm.java.designPattern.factory;/*创建詹姆斯工厂*/
public class JamesPlayerFractory extends PlayerFractory {@Overridepublic Player createPlayer() {return new James();}}

3.4 客户端代码

package org.ssm.java.designPattern.factory;/*客户端测试工厂类*/
public class MethodFactory {public static void main(String[] args) {/*1.创建科比的工厂类。。。好别扭;2.创建球员科比;3.调用方法,输出球员描述;*/PlayerFractory playerFractory = new KobePlayerFractory();Player player = playerFractory.createPlayer();player.desc();//控制台输出:曼巴科比,偏执好胜!}}

4.抽象工厂模式

4.1 详见后续博客:

Java总结之设计模式(工厂模式)相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  3. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  4. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  5. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  6. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  7. java设计模式工厂模式_Java中的外观设计模式

    java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...

  8. 设计模式-工厂模式的3中不同实现[JAVA]

    设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...

  9. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 话说:"天地开辟,未有人民,女娲抟土为人."女娲需要用土造出一个个的人,但在女娲造出人之前, ...

  10. Java的反射机制 工厂模式综合讲解【转载自51CTO】

    2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...

最新文章

  1. mina、netty消息边界问题
  2. linux中mbr最大多少分区,Linux与磁盘分区介绍(MBR,GPT)
  3. 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
  4. Hbase中的列式表映射到hive的外表
  5. centos7 安装VNC Server
  6. 前端页面读取ukey
  7. 半部秘籍--分类、回归、集成与无监督
  8. xp计算机无法远程桌面连接,xp系统远程桌面不能连接指定计算机的处理方法
  9. 菜鸟学四轴控制器之6:刀具半径补偿算法
  10. CF1427F Boring Card Game
  11. [转载] 晓说——第29期:海上霸主航母(上)
  12. 前端开发应知网站(Marksheng)
  13. 从关山口到五道口(2019年清华计算机考研全程回顾+经验+总结)
  14. 2015-10-13 OC语言中的复合
  15. Java8:接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】
  16. Go (Golang) 工具之自动化版本工具 gsemver | semver 语义化版本规范
  17. Electron使用electron-updater自动更新
  18. 有线网络(网关等)和无线网络通信(蓝牙跳频通信等)讲解
  19. 高数 | 单调函数必有反函数 有反函数的不一定是单调函数
  20. 【高等代数】线性空间

热门文章

  1. 正态分布实验报告matlab,matlab实验报告(实验3).doc
  2. 手把手教你读财报----银行业---第九课
  3. html酷炫电子时钟效果,逼真的HTML5 canvas模拟时钟特效
  4. oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数
  5. kali信息收集二 Sublist3r安装以及出现的问题
  6. 注意供电电压不足的问题,特别是单靠电脑USB供电时
  7. MySQL测试SQL执行的速度测试
  8. 2019 面试准备 - 图片
  9. 锂电池标3.7V或4.2V的区别
  10. CATIA V5R21 Win10 64bit安装教程