当前位置: 首页 > news >正文

启迪网站建设/海外营销公司

启迪网站建设,海外营销公司,网站建设需要多少工种,怎样建设网站官网该项目源码地址:https://github.com/ggb2312/JavaNotes/tree/master/design-pattern(设计模式相关代码与笔记) 1. 定义 定义一个创建对象的接口,但让实现这个接口的类来决定实例化那个类,工厂方法让类的实例化推迟到子…

该项目源码地址:https://github.com/ggb2312/JavaNotes/tree/master/design-pattern(设计模式相关代码与笔记)

1. 定义

定义一个创建对象的接口,但让实现这个接口的类来决定实例化那个类,工厂方法让类的实例化推迟到子类中进行。

2. 适用场景

  • 创建对象需要大量重复的代码
  • 应用层不依赖于产品类实例如何被创建、实现等细节
  • 一个类通过其子类来指定创建那个对象

3. 类图与角色

工厂方法类图

  • Product: 定义工厂方法所创建的对象的接口;
  • Creator:声明工厂方法,并返回一个Product类型的对象;
  • ConcreteProduct:是具体的产品,实现了Product接口;
  • ConcreteCreator:是具体的工厂方法,返回一个ConcreteProduct实例。

4. 代码实例

背景:现在慕课网需要录制Java、Python等视频课程

(1)创建抽象视频类,定义具体录制视频课程的公共接口

类图对应的角色Product

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

(2)创建抽象工厂类,定义具体工厂的公共接口

类图对应的角色Creator

public abstract class VideoFactory {public abstract Video getVideo();
}

(3)创建具体视频类(继承抽象视频类),定义录制的具体视频课程

类图对应的角色ConcreteProduct

public class JavaVideo extends Video {@Overridepublic void produce() {System.out.println("录制java课程");}
} 
public class PythonVideo extends Video {@Overridepublic void produce() {System.out.println("录制python课程");}
}

(4)创建具体工厂类(继承抽象工厂类),定义创建对应具体视频实例的方法

类图对应的角色ConcreteCreteCreator

public class JavaVideoFactory extends VideoFactory {public Video getVideo() {return new JavaVideo();}
}
public class PythonVideoFactory extends VideoFactory {public Video getVideo() {return new PythonVideo();}
}

(5)创建应用层进行测试

项目结构

public class Test {public static void main(String[] args) {VideoFactory videoFactory = new PythonVideoFactory();VideoFactory videoFactory1 = new JavaVideoFactory();Video video = videoFactory.getVideo();video.produce();}
}

测试结果:

测试结果

(6)扩展

如果现在需要录制前端课程只需要,添加一个录制前端视频类和一个创建前端视频类的工厂即可。

public class FEVideo extends Video {@Overridepublic void produce() {System.out.println("录制前端课程视频");}
}
public class FEVideoFactory extends  VideoFactory {public Video getVideo() {return new FEVideo();}
}

应用层调用测试

public class Test {public static void main(String[] args) {VideoFactory videoFactory = new PythonVideoFactory();VideoFactory videoFactory1 = new JavaVideoFactory();VideoFactory videoFactory2 = new FEVideoFactory();Video video = videoFactory.getVideo();video.produce();}
}

查看类图

类图

5. 优点

  • 用户只需要关心所需产品对应的工厂,无须关系创建细节
  • 加入新产品,只需要增加相应的具体产品类和相应的工厂子类即可,符合开闭原则,提高可扩展性
  • 每个具体工厂类只负责创建对应的产品,符合单一职责原则

6. 缺点

  • 添加新产品时,除了增加新产品类外,还要提供与之对应的具体工厂类,系统类的个数将成对增加,在一定程度上增加了系统的复杂度;同时,有更多的类需要编译和运行,会给系统带来一些额外的开销。
  • 由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。
  • 一个具体工厂只能创建一种具体产品

7. 总结

工厂模式可以说是简单工厂模式的进一步抽象和拓展,在保留了简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现。

8. 扩展-JDK1.7源码中的工厂方法

转载于:https://www.cnblogs.com/gj-blog/p/10929460.html

http://www.lbrq.cn/news/969049.html

相关文章:

  • 做视频挣钱的网站/网络运营培训课程
  • 用服务器ip做网站/单页网站seo优化
  • 时尚网站欣赏/淘宝直通车推广怎么做
  • 做网站用的hu软件/苏州seo服务
  • 做织梦网站时图片路径显示错误/湖北seo诊断
  • wordpress.短视频主题/百度网络优化
  • 中国菲律宾南海事件/优化排名案例
  • 做网站需要的电脑配置/seo长尾关键词排名
  • 网站内图片变换怎么做/武汉seo外包平台
  • 零基础网络工程师培训/正规seo排名多少钱
  • 杨永生的设计风格/万词霸屏百度推广seo
  • 企业信息系统架构/如何做好搜索引擎优化工作
  • 广东政府网站集约化平台/希爱力
  • 网站建设 电话营销/小说风云榜
  • 广东 建设银行社会招聘网站/快速建站教程
  • 张家港普通网站建设/软文推广去哪个平台好
  • phpcmsv9 网站搬家/优化服务公司
  • 进出石家庄最新通知/seo排名规则
  • app免费下载网站地址进入/怎么优化标题和关键词排名
  • 湛江网站建设皆选小罗24专业/百度搜索一下就知道
  • 深圳龙岗做网站公司/打开百度app
  • 做网站找哪个公司好/百度seo排名点击器app
  • 说一说网站建设的含义/百度网盘免费下载
  • 购物网站开发背景及目的/拓客渠道有哪些
  • 做网站公司 营销/深圳正规seo
  • 青岛专业网站建设公司/超级搜索引擎
  • 甘肃疫情最新消息2021/怎么关闭seo综合查询
  • 通江县建设局网站/开网站需要什么流程
  • 做网络教育录播网站/google排名
  • 梦幻创意网站建设/百度竞价关键词价格查询
  • 创建项目:使用Spring Initializr初始化你的第一个应用程序
  • Linux的Ext系列文件系统
  • Node.js Process Events 深入全面讲解
  • 【C++】神奇的AVL树
  • 分布式通信框架 - JGroups
  • Java面试基础:面向对象(2)