域名申请好怎么做网站,p2p网站制作价格,免费商城网站建设平台,东莞58同城网招聘创建型设计模式 - 抽象工厂设计模式 一. 简介二. 列子2.1 定义电脑的抽象类和子类2.2 定义抽象工厂类和其实现类2.3 测试 三. 抽象工厂设计模式的好处四. 抽象工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出#xff0c;关注我#xff0c;接下来还会持续… 创建型设计模式 - 抽象工厂设计模式 一. 简介二. 列子2.1 定义电脑的抽象类和子类2.2 定义抽象工厂类和其实现类2.3 测试 三. 抽象工厂设计模式的好处四. 抽象工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出关注我接下来还会持续更新。 作者神的孩子都在歌唱 抽象工厂设计模式是创建模式之一。抽象工厂模式 几乎与 工厂模式 相似只是它更像工厂的工厂。
一. 简介
看本片文章前可以先看 工厂设计模式您会注意到我们有一个 Factory 类。该工厂类根据提供的输入返回不同的子类工厂类使用 if-else 或 switch 语句来实现此目的。在抽象工厂模式中我们摆脱了 if-else 块每个子类都有一个工厂类然后设置一个抽象工厂类工厂类去实现这个抽象工厂。工厂方法模式只生产一个等级的产品而抽象工厂模式可生产多个等级的产品。大白话可能没办法讲清楚接下来会通过代码解释这样就能很容易掌握和理解工厂模式和抽象工厂模式之间的细微差别。
二. 列子 就像我们的工厂模式案例一样我们将使用相同的超类和子类。 假如我们要做一个电脑购买系统里面有台式机 和笔记本 他们是 电脑Computer类别在购买的时候可以选择内存memory和磁盘disk两个参数。可是台式机又有 华为台式机 HuaWeiPc和 小米台式机(XiaoMiPc) 笔记本又有 华为笔记本HuaWeiLaptop 和小米笔记本(XiaoMiLaptop) 。 台式机和笔记本是一个等级华为和小米又是一个等级这种多态性就适合使用抽象工厂设计模式类图如下 这里设置一个抽象工厂(ComputerAbstractFactory), 台式机 PcFactory笔记本LaptopFactory这两个工厂实现他创建一个工厂ComputerFactory给客户端提供创建子类的入口点
2.1 定义电脑的抽象类和子类
电脑抽象类
/*** 电脑抽象类** author chenyunzhi* date 2023/12/27 0:09*/
public abstract class Computer {/*** 内存抽象方法* return string*/public abstract String memory();/*** 磁盘抽象方法* return string*/public abstract String disk();Overridepublic String toString() {return 内存: memory() 磁盘: disk();}
}华为台式机
/*** 华为台式机** author chenyunzhi* date 2023/12/27 0:22*/
public class HuaWeiPc extends Computer {private final String memory;private final String disk;public HuaWeiPc(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic String memory() {return this.memory;}Overridepublic String disk() {return this.disk;}
}小米台式机
/*** 小米台式机** author chenyunzhi* date 2023/12/27 0:23*/
public class XiaoMiPc extends Computer{private final String memory;private final String disk;public XiaoMiPc(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic String memory() {return this.memory;}Overridepublic String disk() {return this.disk;}
}华为笔记本
/*** 华为笔记本** author chenyunzhi* date 2023/12/27 0:26*/
public class HuaWeiLaptop extends Computer{private final String memory;private final String disk;public HuaWeiLaptop(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic String memory() {return this.memory;}Overridepublic String disk() {return this.disk;}
}小米笔记本
/*** 小米笔记本** author chenyunzhi* date 2023/12/27 0:30*/
public class XiaoMiLaptop extends Computer{private final String memory;private final String disk;public XiaoMiLaptop(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic String memory() {return this.memory;}Overridepublic String disk() {return this.disk;}
}2.2 定义抽象工厂类和其实现类
电脑抽象工厂 创建一个接口或者抽象类都可以 /*** 电脑抽象工厂** author chenyunzhi* date 2023/12/27 22:53*/
public interface ComputerAbstractFactory {/*** 创建华为电脑接口*/public Computer createHuaWeiComputer();/*** 创建小米电脑接口*/public Computer createXiaoMiComputer();
}台式机工厂
/*** 台式机工厂** author chenyunzhi* date 2023/12/27 21:57*/
public class PcFactory implements ComputerAbstractFactory{private final String memory;private final String disk;public PcFactory(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic Computer createHuaWeiComputer() {return new HuaWeiPc(memory, disk);}Overridepublic Computer createXiaoMiComputer() {return new XiaoMiPc(memory, disk);}
}笔记本工厂
/*** 笔记本工厂** author chenyunzhi* date 2023/12/27 23:08*/
public class LaptopFactory implements ComputerAbstractFactory{private final String memory;private final String disk;public LaptopFactory(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic Computer createHuaWeiComputer() {return new HuaWeiLaptop(memory, disk);}Overridepublic Computer createXiaoMiComputer() {return new XiaoMiLaptop(memory, disk);}
}2.3 测试
/*** 测试** author chenyunzhi* date 2023/12/27 23:25*/
public class TestDesignPatterns {public static void main(String[] args) {testDesignPatterns();}private static void testDesignPatterns() {Computer huaWeiComputer ComputerFactory.getHuaWeiComputer(new PcFactory(32 GB, 1 TB));System.out.println(华为pc电脑 huaWeiComputer);Computer xiaoMiComputer ComputerFactory.getXiaoMiComputer(new PcFactory(16 GB, 512 GB));System.out.println(小米pc电脑 xiaoMiComputer);Computer huaWeiComputer1 ComputerFactory.getHuaWeiComputer(new LaptopFactory(8 GB, 1 TB));System.out.println(华为笔记本电脑 huaWeiComputer1);Computer xiaoMiComputer1 ComputerFactory.getXiaoMiComputer(new LaptopFactory(4 GB, 512 GB));System.out.println(小米笔记本电脑 xiaoMiComputer1);}
}三. 抽象工厂设计模式的好处
抽象工厂模式是“工厂的工厂”可以很容易地扩展以容纳更多的产品例如我们可以添加另一个子类 ipad 和工厂 ipadFactory。抽象工厂模式是健壮的并且避免了工厂模式的条件逻辑。
四. 抽象工厂模式的案例
javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance() 作者神的孩子都在歌唱 本人博客https://blog.csdn.net/weixin_46654114 转载说明务必注明来源附带本人博客连接。