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的更多相关文章

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

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

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

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

  3. 设计模式之美:Factory Method(工厂方法)

    索引 别名 意图 结构 参与者 适用性 缺点 效果 相关模式 命名约定 实现 实现方式(一):Creator 类是一个抽象类并且不提供它所声明的工厂方法的实现. 实现方式(二):Creator 类是一 ...

  4. Java设计模式从精通到入门五 抽象工厂方法模式

    定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. ​ 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...

  5. 我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法

    课程视频 单例模式         建造者VS工厂方法                      课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博客原创文章,博客, ...

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

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

  7. 设计模式课程 设计模式精讲 4-2 简单工厂coding

    1 代码演练 1.1 未使用简单工厂模式代码 1.2 使用简单工厂模式 1.3 使用反射机制简单工行模式 1 代码演练 1.1 未使用简单工厂模式代码 测试类: package com.geely.d ...

  8. 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...

  9. 设计模式课程 设计模式精讲 22-2 备忘录模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类  三个类. ...

随机推荐

  1. 线索二叉树的详细实现(C++)

    线索二叉树概述 二叉树虽然是非线性结构,但二叉树的遍历却为二又树的结点集导出了一个线性序列.希望很快找到某一结点的前驱或后继,但不希望每次都要对二叉树遍历一遍,这就需要把每个结点的前驱和后继信息记录下 ...

  2. Java-POJ1001-求高精度幂

    参考博客:https://www.cnblogs.com/downrainsun/p/11041960.html package poj.ProblemSet; import java.math.Bi ...

  3. 微信小程序使用wxParse实现接入富文本编辑

    简介 微信小程序中比如活动说明,简介这样的图文介绍说明页面,后台通常配置成富文本编辑框,由后台直接输入内容,然后在小程序界面展现. 但是富文本编辑提取到内容是html格式的,写法与小程序的wxml并不 ...

  4. python爬虫-----Python访问http的几种方式

    爬取页面数据,我们需要访问页面,发送http请求,以下内容就是Python发送请求的几种简单方式: 会使用到的库  urllib   requests 1.urlopen import urllib. ...

  5. layuiAdmin pro v1.x 【单页版】开发者文档

    layuiAdmin std v1.x [iframe版]开发者文档 题外 该文档适用于 layuiAdmin 专业版(单页面),阅读之前请务必确认是否与你使用的版本对应. 熟练掌握 layuiAdm ...

  6. js + jquery 实现分页区翻页

    简单来说,情况是这样的,假如做好了对动漫每一集进行分页,如下图: 但当分页太多就会变得不能看,而且前后箭头也不能只是摆设. 想要得到类似这样效果: 网上搜了一会翻页相关的库没什么效果,也不太合适自己的 ...

  7. windows10下VS2013搭建opencv2.4.9吐血之作

    1.下载opencv2.4.9.exe文件,然后双击extract文件到指定目录 2.按此链接安装opencv:https://www.cnblogs.com/cuteshongshong/p/405 ...

  8. Java SimpleDateFormat 日期-时间格式参数

    字母          日期或时间元素 表示          示例           G     Era 标志符 Text  AD y 年 Year 1996; 96 M 年中的月份 Month ...

  9. plupload上传视频插件jQuery+php

    我在网上找到一个很好的视频上传插件,经过我的一些整理.补充,在这里分享给大家. 这个视频插件是新浪微博plupload上传视频插件,支持格式有mpg,m4v,mp4,flv,3gp,mov,avi,r ...

  10. VS2013 Solution Explorer can not open

    Delete content under the path: C:\Users\username\AppData\Local\Microsoft\VisualStudio\12.0\Component ...