设计模式课程 设计模式精讲 5-2 工厂方法coding
1 课堂讲义
1.1 产品等级和产品簇
2 代码演练
2.1 工厂方法代码演练
1 课堂讲义
1.1 产品等级和产品簇
工厂方法是为了解决同一产品等级的业务抽象问题
抽象工厂方法是为了解决同一产品簇的问题
产品等级:
相同类型的产品为同一产品等级。
比如:汽车有大众汽车,长安汽车,奥迪汽车等。长安汽车和奥迪汽车,大众汽车属于同一产品等级.
产品簇:
长安汽车,长安摩托车,长安自行车。
2 代码演练
2.1 工厂方法代码演练

测试类:
package com.geely.design.pattern.creational.factorymethod;
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();
// }
/**
* 3 简单工厂模式
* 通过反射机制,获得工厂子类
* @param args
*/
// public static void main(String [] args){
// VideoFactory videoFactory = new VideoFactory();
// //通过反射获取子类
// Video video = videoFactory.getVideo(JavaVideo.class);
// video.printVideo();
// }
/**
* 4 工厂模式
*/
public static void main(String [] args){
VideoFactory videoFactory = new JavaVideoFactory();
VideoFactory videoFactory1 = new NetVideoFactory();
Video javaVideo = videoFactory.getVideo();
Video netVideo = videoFactory1.getVideo();
javaVideo.printVideo();
netVideo.printVideo();
}
}
video抽象工厂类:
package com.geely.design.pattern.creational.factorymethod;
public abstract class VideoFactory {
private Video video = null;
/**
* 可以使用静态方法来构建
* @param c
* @return
*/
// public Video getVideo(String param) {
// if("java".equals(param)){
// return new JavaVideo();
// }else if("net".equals(param)){
// return new ();
// }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;
// }
/**
* 工厂设计模式,将其改为抽象方法,子方法继承即可。
*/
public abstract Video getVideo();
}
javavideo工厂类:
package com.geely.design.pattern.creational.factorymethod;
public class JavaVideoFactory extends VideoFactory{
/**
* 这里实现抽象方法 getVideo
* @return
*/
@Override
public Video getVideo() {
Video video = new JavaVideo();
return video;
}
}
netvideo工厂类:
package com.geely.design.pattern.creational.factorymethod;
public class NetVideoFactory extends VideoFactory{
/**
* 这里生成netVideo
* @return
*/
@Override
public Video getVideo() {
Video video = new NetVideo();
return video;
}
}
video类:
package com.geely.design.pattern.creational.factorymethod;
public abstract class Video {
public abstract void printVideo();
}
javavideo类:
package com.geely.design.pattern.creational.factorymethod;
public class JavaVideo extends Video {
@Override
public void printVideo() {
System.out.println("录制java视频");
}
}
netvideo类:
package com.geely.design.pattern.creational.factorymethod;
public class NetVideo extends Video{
@Override
public void printVideo() {
System.out.println("录制.Net视频!");
}
}
打印日志:
"C:\Program Files\Java\jdk1.6.0_43\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=31524:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.6.0_43\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\out\production\design_pattern" com.geely.design.pattern.creational.factorymethod.Test
录制java视频
录制.Net视频! Process finished with exit code 0
设计模式课程 设计模式精讲 5-2 工厂方法coding的更多相关文章
- 设计模式课程 设计模式精讲 7-2 建造者模式Coding
1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...
- 设计模式课程 设计模式精讲 17-2 模板方法模式coding
1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...
- 设计模式之美:Factory Method(工厂方法)
索引 别名 意图 结构 参与者 适用性 缺点 效果 相关模式 命名约定 实现 实现方式(一):Creator 类是一个抽象类并且不提供它所声明的工厂方法的实现. 实现方式(二):Creator 类是一 ...
- Java设计模式从精通到入门五 抽象工厂方法模式
定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...
- 我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法
课程视频 单例模式 建造者VS工厂方法 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博客原创文章,博客, ...
- 设计模式课程 设计模式精讲 6-2 抽象工厂coding
1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...
- 设计模式课程 设计模式精讲 4-2 简单工厂coding
1 代码演练 1.1 未使用简单工厂模式代码 1.2 使用简单工厂模式 1.3 使用反射机制简单工行模式 1 代码演练 1.1 未使用简单工厂模式代码 测试类: package com.geely.d ...
- 设计模式课程 设计模式精讲 18-2 迭代器模式coding
1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...
- 设计模式课程 设计模式精讲 22-2 备忘录模式coding
1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类 三个类. ...
随机推荐
- Gym安装ubuntu16.04
Step1:将gym克隆到计算机上: git clone https://github.com/openai/gym.git 如果你的电脑没有安装git,那么键入 sudo apt install g ...
- bugku 变量1
变量1 题目信息 flag In the variable ! <?php error_reporting(0); include "flag1.php"; highligh ...
- XSS 2
通过第一题之后继续进行第二题 我们会发现这个体会将内容放到<textarea></textarea>中然后我们刚才那段代码就失效了 因为这个代码可以将我们输入的内容转换成超文本 ...
- Linux shell lrzsz上传下载命令
安装lrzsz做上传下载 工具使用secretCRT yum install -y lrzsz 1. 服务器<发送>文件,使用命令sz 2. 服务器<接收>文件,使用命令rz
- MySQL连接
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右连接): 获取右表所 ...
- org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接. at org ...
- JEECG笔记
一.修改默认主题 找到SysThemesEnum.java类,路径为:\src\org\jeecgframework\core\enums\SysThemesEnum.java,在toEnum(Str ...
- Azure IoT Hub 十分钟入门系列 (3)- 使用消息路由将原始设备数据记录存档
本文主要分享一个案例: 10分钟使用消息路由将原始设备数据记录存档 B站视频讲解:https://www.bilibili.com/video/av90223893/ 本文主要有如下内容: 1.理解什 ...
- 关于C++指针、引用和const关键字的各种关系
#include <stdio.h> #include<iostream> using namespace std; typedef char *new_type; int m ...
- Ubuntu16 nginx 配置 Let's Encrypt 免费ssl
每篇一句 Some of us get dipped in flat, some in satin, some in gloss. But every once in a while you find ...