设计模式课程 设计模式精讲 4-2 简单工厂coding
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的更多相关文章
- php设计模式课程---3、为什么会有抽象工厂方法
php设计模式课程---3.为什么会有抽象工厂方法 一.总结 一句话总结: 解决简单工厂方法增加新选择时无法满足面向对象编程中的开闭原则问题 1.什么是面向对象编程中的开闭原则? 应该对类的增加开放, ...
- 设计模式课程 设计模式精讲 5-2 工厂方法coding
1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...
- 设计模式课程 设计模式精讲 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 ...
- 设计模式-简单工厂Coding+jdk源码解析
感谢慕课geely老师的设计模式课程,本套设计模式的所有内容均以课程为参考. 前面的软件设计七大原则,目前只有理论这块,因为最近参与项目重构,暂时没有时间把Coding的代码按照设计思路一点点写出来. ...
- 研磨设计模式解析及python代码实现——(一)简单工厂模式
最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟.<研磨设计模式>书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了 ...
- 设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式
1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝 ...
- 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- 设计模式课程 设计模式精讲 6-2 抽象工厂coding
1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...
随机推荐
- Java输入输出挂
import java.util.Comparator; import java.io.BufferedReader; import java.io.BufferedWriter; import ja ...
- 解决tomcat控制台乱码问题
问题原因:编码不一致,tomcat启动后默认编码UTF-8,而windows的默认编码是GBK.所以只需配置启动tomcat后为GBK编码即可. 做法:找到路径 $xxx$\apache-tomcat ...
- maven版cxf集合spring开发服务端(二)
一.新建一个maven项目 二.pom.xml引入依赖 <dependency> <groupId>org.apache.cxf</groupId> <art ...
- Java进阶学习(2)之对象交互(下)
访问属性 封闭的访问属性 private等访问权限控制是对类的,这意味着同一类的不同对象可以互相访问其成员 这是从代码层面去考虑的,意味着不同类文件 开放的访问属性 一个类文件就是一个编译单元 pub ...
- 一组关于{x}的积分
\[\Large\displaystyle \int_{0}^{1}\left \{ \frac{1}{x} \right \}\mathrm{d}x~,~\int_{0}^{1}\left \{ \ ...
- appium可通过SDK自带的uiautomatorviewer或monitor工具,来查看页面元素(Android)
工具一:uiautomatorviewer 1.在SDK的tools目录中找到uiautomatorviewer,双击打开若出现闪退一般是jdk版本不匹配(建议安装jdk1.8的): 2.在使用这个工 ...
- Go之Cookie和Session
文章引用自 Cookie和Session Cookie和Session是Web开发绕不开的一个环节,本文介绍了Cookie和Session的原理及在Go语言中如何操作Cookie. Cookie Co ...
- 五、request模块
描述:requests是python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比python自带的网络库urllib更加简单.方便和人性化:使 ...
- svn的安装和备份
svn的安装: yum install subversion -y mkdir /svn 创建用来存放svn版本库的目录 svnadmin create /svn/first 创建一个svn的版本库 ...
- zookeeper的安装(单机版)
一.获取zookeeper的安装包 zookeeper的官网下载:wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zo ...