网站备案需要那些资料,安装wordpress中文包,布吉网站建设哪家服务周到,织梦网做企业网站需要授权吗接java设计模式-工厂模式#xff08;上#xff09;
抽象工厂模式
针对耳机的生产需求#xff0c;我们可以知道#xff0c;刚才的工厂已经不满足了#xff0c;因为只是生产一类产品-手机#xff0c;但是现在我们需要的工厂类是要生产一个产品族#xff08;手机和耳机上
抽象工厂模式
针对耳机的生产需求我们可以知道刚才的工厂已经不满足了因为只是生产一类产品-手机但是现在我们需要的工厂类是要生产一个产品族手机和耳机。
每个手机产品的耳机要求可以进行变动可以是无线的也可以是有线的。
模式结构
AbstractFactory抽象工厂它声明了一组用于创建一族产品的方法每一个方法对应一种产品ConcreteFactory具体工厂它实现了在抽象工厂中声明的创建产品的方法生成一组具体产品这些产品构成了一个产品族每一个产品都位于某个产品等级结构中。AbstractProduct抽象产品它为每种产品声明接口在抽象产品中声明了产品所具有的业务方法。ConcreteProduct具体产品它定义具体工厂生产的具体产品对象实现抽象产品接口中声明的业务方法。
我们依然保留开始的AbstractPhone类 以及一加和真我两个具体产品类。YijiaPhoneZhenwoPhone
在此基础上我们再定义一个耳机的抽象产品类 以及 两个耳机具体产品类有线无线。
/*** 耳机的抽象产品类** author jiangkd* date 2023/7/28 15:17:28*/
public abstract class AbstractHeadset {/*** 耳机类型,有线无线*/public abstract void type();/*** 音质*/public abstract void tone();}两个耳机具体实现类
/*** 耳机具体实现类, 有线耳机** author jiangkd* date 2023/7/28 15:19:54*/
Slf4j
public class YouxianHeadset extends AbstractHeadset {Overridepublic void type() {log.info(我是有线耳机!!!);}Overridepublic void tone() {log.info(有线耳机, 音质杠杠的!!!);}
}/*** 耳机具体实现类, 无线耳机** author jiangkd* date 2023/7/28 15:21:14*/
Slf4j
public class WuxianHeadset extends AbstractHeadset {Overridepublic void type() {log.info(我是无线耳机!!!);}Overridepublic void tone() {log.info(无线耳机, 音质妥妥的!!!);}}定义一个工厂类用来生产一族产品手机和耳机
/*** 抽象工厂类** author jiangkd* date 2023/7/28 15:23:13*/
public abstract class AbstractFactory {/*** 生产手机* return*/public abstract AbstractPhone createPhone();/*** 生产耳机* return*/public abstract AbstractHeadset createHeadset();}一加手机的生产实现类一加手机 无线耳机
/*** 一加手机产品族工厂具体实现类** author jiangkd* date 2023/7/28 15:34:46*/
public class YijiaFactory extends AbstractFactory {Overridepublic AbstractPhone createPhone() {return new YijiaPhone();}/*** 一加手机配无线耳机* return*/Overridepublic AbstractHeadset createHeadset() {return new WuxianHeadset();}}然后是真我手机的生产实现类真我手机 有线耳机
/*** 真我手机产品族工厂具体实现类** author jiangkd* date 2023/7/28 15:44:17*/
public class ZhenwoFactory extends AbstractFactory {Overridepublic AbstractPhone createPhone() {return new ZhenwoPhobe();}/*** 有线耳机** return*/Overridepublic AbstractHeadset createHeadset() {return new YouxianHeadset();}
}测试一下
/*** author jiangkd* date 2023/7/28 15:45:02*/
Slf4j
public class DemoTest {public static void main(String[] args) {// 生产 一加手机 耳机final AbstractFactory yijiaFactory new YijiaFactory();final AbstractPhone yijiaPhone yijiaFactory.createPhone();final AbstractHeadset yijiaHeadset yijiaFactory.createHeadset();yijiaPhone.brand();yijiaPhone.color();yijiaHeadset.type();yijiaHeadset.tone();log.info(--------------------------------);// 生产 真我手机 耳机final AbstractFactory zhenwoFactory new ZhenwoFactory();final AbstractPhone zhenwoPhone zhenwoFactory.createPhone();final AbstractHeadset zhenwoHeadset zhenwoFactory.createHeadset();zhenwoPhone.brand();zhenwoPhone.color();zhenwoHeadset.type();zhenwoHeadset.tone();}}执行结果记录日志: 15:50:20.523 [main] INFO demo.basic.example.design_patterns.gcms.YijiaPhone - 品牌, 一加手机!!! 15:50:20.526 [main] INFO demo.basic.example.design_patterns.gcms.YijiaPhone - 黑色!!! 15:50:20.526 [main] INFO demo.basic.example.design_patterns.gcms.cxgcms.WuxianHeadset - 我是无线耳机!!! 15:50:20.526 [main] INFO demo.basic.example.design_patterns.gcms.cxgcms.WuxianHeadset - 无线耳机, 音质妥妥的!!! 15:50:20.526 [main] INFO demo.basic.example.design_patterns.gcms.cxgcms.DemoTest - -------------------------------- 15:50:20.527 [main] INFO demo.basic.example.design_patterns.gcms.ZhenwoPhobe - 品牌, 真我手机!!! 15:50:20.527 [main] INFO demo.basic.example.design_patterns.gcms.ZhenwoPhobe - 白色!!! 15:50:20.527 [main] INFO demo.basic.example.design_patterns.gcms.cxgcms.YouxianHeadset - 我是有线耳机!!! 15:50:20.527 [main] INFO demo.basic.example.design_patterns.gcms.cxgcms.YouxianHeadset - 有线耳机, 音质杠杠的!!!