设计模式课程 设计模式精讲 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 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类 三个类. ...
随机推荐
- 第二十七篇 玩转数据结构——集合(Set)与映射(Map)
1.. 集合的应用 集合可以用来去重 集合可以用于进行客户的统计 集合可以用于文本词汇量的统计 2.. 集合的实现 定义集合的接口 Set<E> ·void add(E) ...
- AcWing 849. Dijkstra求最短路 I 朴素 邻接矩阵 稠密图
//朴素Dijkstra 边权都是正数 稠密图:点和边差的比较多 #include<cstring> #include<iostream> #include<algori ...
- vue Cli 按需引入Element UI 和全局引用Element UI
全局引用: 一.安装 Element UI npm i element-ui -S 二.在main.js 中引入 element UI import ElementUI from 'element-u ...
- 随机获取list或set或map中的一个元素
转自:https://m.2cto.com/kf/201507/412937.html import java.util.HashSet;import java.util.List;import ja ...
- Springboot项目搭建(3)-shiro登录
shiro简述+实现简单登录:https://www.jianshu.com/p/7f724bec3dc3
- 动态设置 layui select 为选中状态
// 当前的select的id $('#type').val('你的value值'); //更新全部 layui.form.render();
- npm报错This is probably not a problem with npm. There is likely additional logging
使用webstorm开发时,遇到npm 报错,于是尝试了如下所有的方法,不完全统计. https://blog.csdn.net/liu305088020/article/details/791823 ...
- 各种颜色空间之间的转换算法(XYZ → Standard-RGB ,Standard-RGB → XYZ)
http://www.easyrgb.com/en/convert.php#Result http://www.easyrgb.com/en/math.php
- mybatis - 执行 getById
1. getById 的执行 前面一篇 提到过, Mapper.java 创建的时候, 会通过 jdk 代理的方式来创建, 且代理处理类为: MapperProxy . 所以当执行 UserMappe ...
- php-cp(php连接池)扩展的安装
今天看到php有连接池的扩展,不管效果怎么样,都值得一试,这样才会有突破. 先从guthub上搜索源码:[ https://github.com/swoole/php-cp ] 通过命令clone到自 ...