设计模式的总结二:创造型模式-抽象工厂模式
来源:互联网 发布:邮政网络培训学院登录 编辑:程序博客网 时间:2024/06/06 18:01
一:创造型模式的理解:
1.抽象工厂模式
抽象工厂模式是是相比工厂方法模式抽象层次更高。抽象工厂返回的是一组类的工厂,然后每个工厂能生产一类产品(有的书上称之为产品族,类似可以把公司抽象成的工厂,谷歌就是这个工厂的子类,苹果也是这个工厂的子类。谷歌有搜索引擎,安卓,地图等产品,苹果有手机,ipad和mac等产品。类比的看都是一种抽象工厂模式的实例)。
同工厂方法模式类似(工厂方法模式就是返回多个子类中的一个),抽象工厂模式能够返回一个工厂,一个工厂就能返回多个子类中的一个。
可以说工厂模式是创造型模式的典型示例,抽象公共模式是工厂方法模式的扩展,允许创建更多类型的对象。
具体类包括:
抽象工厂:声明一个用于完成抽象产品对象创建操作的接口。
具体工厂:实现创建具体产品对象的操作。
抽象产品:声明一个用于一类产品对象的接口。
具体产品:定义相应的具体工厂来创建的产品对象。
客户端:使用抽象工厂创建特定产品的工厂,生成特定的产品。
2.抽象工厂带来的优势:
客户端和具体的产品类之间彻底解耦,这是抽象工厂模式最主要的好处之一。我们可以很轻松的添加一类产品,只需要实现这类产品的工厂和定义这类产品就行。
3.代码实现:
public class Part { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}... ...public abstract class Car { //定义的一个抽象工厂类 public String name = "Car"; abstract Part getWheels(); abstract Part getEngines(); abstract Part getBody(); public void show(){ System.out.println("-------------------------------------------"); System.out.println("Car name:" + name); System.out.println("wheels:" + getWheels().getName()); System.out.println("engines:" + getEngines().getName()); System.out.println("body:" + getBody().getName()); System.out.println("-------------------------------------------"); }}... ...public class BenzCar extends Car { //抽象工厂类的子类 private String name = "BenzCar"; public BenzCar(String name){ this.name = name; } @Override Part getWheels() { Part part = new Part(); part.setName(name + " Wheels"); return part; } @Override Part getEngines() { Part part = new Part(); part.setName(name + " Engines"); return part; } @Override Part getBody() { Part part = new Part(); part.setName(name+ " Body" ); return part; }}... ...public class BmwCar extends Car { //抽象工厂类的子类 private String name = "BmwCar"; public BmwCar(String name){ this.name = name; } @Override Part getWheels() { Part part = new Part(); part.setName(name + " Wheels"); return part; } @Override Part getEngines() { Part part = new Part(); part.setName(name + " Engines"); return part; } @Override Part getBody() { Part part = new Part(); part.setName(name + " Body"); return part; }}... ... public static void main(String[] args){ //客户端上 创建一个宝马的车 Car bmwCar = new BmwCar("BmwCar"); bmwCar.show(); //再添加一个奔驰的车 只要添加相应的类就可以了,client可以很简洁 Car benzCar = new BenzCar("BenzCar"); benzCar.show(); }
阅读全文
0 0
- 设计模式的总结二:创造型模式-抽象工厂模式
- 设计模式的总结二:创造型模式
- 设计模式<二>-抽象工厂
- 设计模式(二):抽象工厂模式
- JAVA--抽象工厂模式--设计模式二
- 设计模式笔记二:抽象工厂模式
- 设计模式(二) 抽象工厂模式
- 设计模式(二):抽象工厂模式
- JAVA设计模式(二)----抽象工厂模式
- 设计模式(二)抽象工厂模式
- 设计模式之 工厂模式(二) 抽象工厂模式
- 设计模式(二)工厂方法模式+抽象工厂模式
- 创建型:设计模式之抽象工厂模式(二)
- 设计模式---工厂模式、抽象工厂模式
- Android的设计模式-抽象工厂模式
- 二:创建型模式:抽象工厂模式
- 设计模式-创建型模式-抽象工厂
- 设计模式-创建型模式-抽象工厂
- 阿里天池的新任务(简单)【字符串匹配哈希算法】 计蒜客初赛第一场
- 插入记录INSERT
- JSTL标准标签库之格式化标签(一)
- ubuntu16.04 简单安装mysql5.7
- Convert BST to Greater Tree
- 设计模式的总结二:创造型模式-抽象工厂模式
- Python提取某字符串中的特殊0
- HDU1003最大连续子序列和
- 多线程的优点
- CMCC-EDU一个帐号,多设备共享解决方案
- 廖雪峰的Git教程四工作区与暂存区
- 针对windows系统的高精度定时器
- 仿天猫网站5:Django传递数据给js
- 快乐数