1    代码演练

1.1  未使用简单工厂模式代码

1.2  使用简单工厂模式

1.3  使用反射机制简单工行模式

1    代码演练
1.1  未使用简单工厂模式代码

测试类:

package com.geely.design.pattern.creational.simplefactory;

public class Test {
/**
* 注:此为反例,
* 没有用简单工厂模式之前,需要new对象。
* @param args
*/
public static void main(String [] args){
Video video = new JavaVideo();
video .printVideo();
}
}

父类Video:

package com.geely.design.pattern.creational.simplefactory;

public abstract class Video {
public abstract void printVideo();
}

子类javaVideo:

package com.geely.design.pattern.creational.simplefactory;

public class JavaVideo extends Video{
@Override
public void printVideo() {
System.out.println("录制java视频");
}
}

子类netVideo:

package com.geely.design.pattern.creational.simplefactory;

public class NetVideo extends Video{
@Override
public void printVideo() {
System.out.println("录制.Net视频!");
}
}

打印结果:

录制java视频

Process finished with exit code 0
1.2  使用简单工厂模式

测试类:

package com.geely.design.pattern.creational.simplefactory;

public class Test {
/**
* 注:此为反例,
* 没有用简单工厂模式之前,需要new对象。
* @param args
*/
// public static void main(String [] args){
// Video video = new JavaVideo();
// video .printVideo();
// } /**
* 2 简单工厂模式
* 这里通过参数调取工厂类,直接获得工厂子类
   * 可以使用静态方法来创建工厂,优点是工厂类不用new了,但是缺点是静态方法继承后无法修改父类
* @param args
*/
public static void main(String [] args){
VideoFactory videoFactory = new VideoFactory();
Video video = videoFactory.getVideo("net");
video .printVideo();
}
}

工厂类:

package com.geely.design.pattern.creational.simplefactory;

public class VideoFactory {
private Video video = null; public Video getVideo(String param) {
if("java".equals(param)){
return new JavaVideo();
}else if("net".equals(param)){
return new NetVideo();
}else{
return null;
}
}
}

父类(同上):

子类javaVideo:(同上)

子类netVideo(同上):

打印日志:

录制.Net视频!

Process finished with exit code 0
1.3  使用反射机制简单工行模式

测试类:

package com.geely.design.pattern.creational.simplefactory;

public class Test {
/**
* 注:此为反例,
* 没有用简单工厂模式之前,需要new对象。
* @param args
*/
// public static void main(String [] args){
// Video video = new JavaVideo();
// video .printVideo();
// } /**
* 2 简单工厂模式
* 这里通过参数调取工厂类,直接获得工厂子类
* @param args
*/
// public static void main(String [] args){
// VideoFactory videoFactory = new VideoFactory();
// Video video = videoFactory.getVideo("net");
// video .printVideo();
// } /**
* 3 简单工厂模式
* 通过反射机制,获得工厂子类
* @param args
*/
public static void main(String [] args){
VideoFactory videoFactory = new VideoFactory();
//通过反射获取子类
Video video = videoFactory.getVideo(JavaVideo.class);
video.printVideo();
}
}

工厂类:

package com.geely.design.pattern.creational.simplefactory;

public class VideoFactory {
private Video video = null; // public Video getVideo(String param) {
// if("java".equals(param)){
// return new JavaVideo();
// }else if("net".equals(param)){
// return new NetVideo();
// }else{
// return null;
// }
// } public Video getVideo(Class c){
Video video = null;
try {
video = (Video) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return video;
}
}

父类(同上):

子类javaVideo:(同上)

子类netVideo(同上):

打印日志:

录制java视频

Process finished with exit code 0

 

设计模式课程 设计模式精讲 4-2 简单工厂coding的更多相关文章

  1. php设计模式课程---3、为什么会有抽象工厂方法

    php设计模式课程---3.为什么会有抽象工厂方法 一.总结 一句话总结: 解决简单工厂方法增加新选择时无法满足面向对象编程中的开闭原则问题 1.什么是面向对象编程中的开闭原则? 应该对类的增加开放, ...

  2. 设计模式课程 设计模式精讲 5-2 工厂方法coding

    1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...

  3. 设计模式课程 设计模式精讲 7-2 建造者模式Coding

    1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...

  4. 设计模式课程 设计模式精讲 17-2 模板方法模式coding

    1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...

  5. 设计模式-简单工厂Coding+jdk源码解析

    感谢慕课geely老师的设计模式课程,本套设计模式的所有内容均以课程为参考. 前面的软件设计七大原则,目前只有理论这块,因为最近参与项目重构,暂时没有时间把Coding的代码按照设计思路一点点写出来. ...

  6. 研磨设计模式解析及python代码实现——(一)简单工厂模式

    最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟.<研磨设计模式>书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了 ...

  7. 设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式

    1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝 ...

  8. 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  9. 设计模式课程 设计模式精讲 6-2 抽象工厂coding

    1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...

随机推荐

  1. VS2015 编译程序时提示 无法查找或打开 PDB 文件

    “mode.exe”(Win32): 已加载“C:\Windows\System32\api-ms-win-core-file-l2-1-0.dll”.无法查找或打开 PDB 文件.“mode.exe ...

  2. np.c_与np.r_

    import sys reload(sys) sys.setdefaultencoding('utf-8') import numpy as np def test(): ''' numpy函数np. ...

  3. AcWing 870. 约数个数

    #include <iostream> #include <algorithm> #include <unordered_map> #include <vec ...

  4. iframe子页面之间值传递

    <div style="width:100%;height: 100%;"> <div style="width:74%;height: 70%;flo ...

  5. 设备驱动基础学习--platform driver简单实现

    platform是一条虚拟的总线.设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的device drive ...

  6. CentOS: 网络连接故障排除

    yum不能正常动作,惯性认为是需要替换BaseURL,结果后来才发现是Gateway不知什么时候被错误设定了,memo如下. 现象表现于yum不能正常动作,确认ping的操作,发现是不能解析DNS [ ...

  7. tomcat安装成功以后进行测试步骤:

    tomcat安装成功以后进行测试步骤: 编写测试页面: 进入Tomcat安装对应路径: E:\Tomcat\apache-tomcat-8.5.45\webapps\ROOT 创建:test.jsp ...

  8. linux 配置IPSAN存储

    一 SAN存储 1.1 SAN存储介绍 存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通 ...

  9. Unity生成的WebGL如何在浏览器中运行

    前言:以为在学完了COMP30019后,应该不会再接触Unity了,没想到之后实习让我去做把一个Unity项目转到WebGL,而关于Unity的WebGL资料很少,基本除了Unity的Manual就只 ...

  10. 图片的onerror 事件解析

    1. 该事件触发条件 文档和图像在加载失败的时候(用户体验会下降.)会触发该事件 2. 解决碎图的办法 利用img的onerror事件和javascript 例: 现有的图片是 successed.p ...