小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)
小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)
小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)比如要生产华为手机,华为路由器,小米手机,小米路由器
先写路由器和手机的接口:
package abstract1; //手机产品接口 public interface IphoneProduct { void start(); void shutdown(); void callup(); void sendMes(); }
package abstract1; //路由器产品接口 public interface IRouteProduct { void start(); void shutdown(); void openWifi(); void setting(); }
再分别实现一个小米手机和小米路由器
以及华为手机华为路由器
package abstract1; //小米手机 public class XiaomiPhone implements IphoneProduct{ @Override public void start() { System.out.println("开启小米手机"); } @Override public void shutdown() { System.out.println("关闭小米手机"); } @Override public void callup() { System.out.println("小米打电话"); } @Override public void sendMes() { System.out.println("小米发短信"); } }
package abstract1; //小米路由器 public class XiaomiRoute implements IRouteProduct { @Override public void start() { System.out.println("启动小米路由器"); } @Override public void shutdown() { System.out.println("关闭小米路由器"); } @Override public void openWifi() { System.out.println("打开小米wifi"); } @Override public void setting() { System.out.println("小米设置"); } }
华为手机和路由器
package abstract1; //华为手机 public class HuaweiPhone implements IphoneProduct { @Override public void start() { System.out.println("开启华为手机"); } @Override public void shutdown() { System.out.println("关闭华为手机"); } @Override public void callup() { System.out.println("华为手机打电话"); } @Override public void sendMes() { System.out.println("华为手机发短信"); } }
package abstract1; //华为路由器 public class HuaweiRoute implements IRouteProduct { @Override public void start() { System.out.println("启动华为路由器"); } @Override public void shutdown() { System.out.println("关闭华为路由器"); } @Override public void openWifi() { System.out.println("打开华为wifi"); } @Override public void setting() { System.out.println("华为设置"); } }
再实现一个产品工厂接口,生产手机和路由器:
package abstract1; //抽象产品工厂 public interface IProductFactory { //生产手机 IphoneProduct iphoneProduct(); //生产路由器 IRouteProduct routerProduct(); }
然后再实现这个接口,
华为生产手机和路由器的工厂
小米生产手机和路由器的工厂:
package abstract1; //华为工厂 public class HuaweiFactory implements IProductFactory { @Override public IphoneProduct iphoneProduct() { return new HuaweiPhone(); } @Override public IRouteProduct routerProduct() { return new HuaweiRoute(); } }
package abstract1; //小米工厂 public class XiaomiFactory implements IProductFactory { @Override public IphoneProduct iphoneProduct() { return new XiaomiPhone(); } @Override public IRouteProduct routerProduct() { return new XiaomiRoute(); } }
最后模拟一个client去调用
package abstract1; public class Client { public static void main(String[] args) { System.out.println("-----------小米系列产品------------"); //小米工厂 XiaomiFactory xiaomiFactory = new XiaomiFactory(); IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct(); iphoneProduct.callup(); iphoneProduct.shutdown(); IRouteProduct iRouteProduct = xiaomiFactory.routerProduct(); iRouteProduct.openWifi(); iRouteProduct.setting(); System.out.println("-----------华为系列产品------------"); //华为工厂 HuaweiFactory huaweiFactory = new HuaweiFactory(); iphoneProduct = huaweiFactory.iphoneProduct(); iphoneProduct.callup(); iphoneProduct.shutdown(); iRouteProduct = huaweiFactory.routerProduct(); iRouteProduct.openWifi(); iRouteProduct.setting(); } }
所以抽象工厂就是抽象的抽象
好了,今天就先到这里
小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)相关教程
-
(小白)MySQL基础学习006 20201022
(小白)MySQL基础学习006 20201022 (小白)MySQL基础学习006 20201022 自定义函数 用户自定义,由多条语句组成 矛盾:mysql在遇到分号(;)会自动执行,但自定义函数内多条语句间的间隔又需要分号,解决方法: 修改临时语句结束符 delimiter delimiter 新符
-
sklearn 小白抱佛脚笔记4: 无监督学习
sklearn 小白抱佛脚笔记4: 无监督学习 Unsupervised learning: seeking representations of the data 类聚: k-means 类聚 Hierarchical agglomerative clustering: Ward 分层类聚算法(HAC): Ward 1. 聚集思路: 同类的尽量聚集在一块 2. 分隔思路: 不同类尽量
-
Kubernetes 小白学习笔记(19)--高可用kubernetes集群
Kubernetes 小白学习笔记(19)--高可用kubernetes集群 config.json { CN: $HOSTNAME, hosts: [ $HOSTNAME, PRIVATE_IP ], key: { algo: ecdsa, size: 256 }, names: [ { C: US, ST: CA, L: San Francisco } ]} 本章涉及到的cfssl命令:cfssl gencert -ca=ca.
-
Vue2.x/Vue3.x跨域问题小白教程
Vue2.x/Vue3.x跨域问题小白教程 Vue2.x/Vue3.x跨域问题小白教程 跨域原因 Vue2.x版本跨域问题解决 proxyTable原理 发送请求页面 安装axios Vue3.x跨域问题解决 发送请求页面 跨域原因 一个网站的js代码段去访问另一个网站时,由于安全原因,跨域访问是被各大
-
教你进阶3D次世代角色高手从小白学成大神
教你进阶3D次世代角色高手,从小白学成大神? 一个新人想要从零基础成为次世代游戏设计师需要经历这些 1. 美术基础和软件基础的学习阶段 想成为次世代游戏设计师,倘若没有美术基础和软件基础,那面对的困难可不是一点点。所以想要入门,首先就是要掌握软件
-
C# Winform 主窗口最小化隐藏至系统托盘中(适合小白)
C# Winform 主窗口最小化隐藏至系统托盘中(适合小白) 前言 和大家分享 一个如何将我们的程序隐藏到系统托盘中的小Demo,非常实用适合小白上手,话多说上项目。 项目 1. 打开Visual Studio 2017,新建一个Winform项目,命名为 MissionBoardData。 2. 打开新建
-
小白练习篇之使用rsync+inotify实现/www目录实时同步
小白练习篇之使用rsync+inotify实现/www目录实时同步 实验环境: rsync服务器是192.168.6.129,客户机上192.168.6.130 1.在192.168.6.129服务器上安装inotify-tools [[emailprotected] /]# yum install inotify-tools -y 备注:inotify是内核的一个功能,我们
-
小白如何选择一款好用的音乐编曲软件看这里
小白如何选择一款好用的音乐编曲软件,看这里 对很多音乐爱好者而言,从单独的欣赏作品,过渡到按自己的心情创作作品,是一段奇妙又欣喜的体验。而音乐编曲,尤其是电音编曲,Daw(宿主软件)是一个很重要的元素。 编曲软件很多,但实际上,不同的软件有着不