创建型模式--抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
1.一个系统要独立于它的产品的创建、组合和表示时。2.一个系统要由多个产品系列中的一个来配置时。3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
参与者
1.AbstractFactory声明一个创建抽象产品对象的操作接口。2.ConcreteFactory实现创建具体产品对象的操作。3.AbstractProduct为一类产品对象声明一个接口。4.ConcreteProduct定义一个将被相应的具体工厂创建的产品对象。实现AbstractProduct接口。5.Client仅使用由AbstractFactory和AbstractProduct类声明的接口
/*** 发动机接口* @author Linhai Gu**/
public interface Motor {public void motor();
}
public class AoDiMotor implements Motor{private String name=null;public AoDiMotor(String name) {this.name=name;}@Overridepublic void motor() {System.out.println(name+"的发动机");}}
public class BaoMaMotor implements Motor{private String name=null;public BaoMaMotor(String name) {this.name=name;}@Overridepublic void motor() {System.out.println(name+"的发动机");}
}
/*** 轮胎接口* @author Linhai Gu**/
public interface Tyre {public void tyre();
}
public class AoDiTyre implements Tyre{private String name=null;public AoDiTyre(String name) {this.name=name;}@Overridepublic void tyre() {System.out.println(name+"的轮胎");}}
public class BaoMaTyre implements Tyre{private String name=null;public BaoMaTyre(String name) {this.name=name;}@Overridepublic void tyre() {System.out.println(name+"的轮胎");}
}
方向盘接口与具体实现:
/*** 方向盘接口* @author Linhai Gu**/
public interface SteeringWhell {public void steeringWhell();
}
public class AoDiSteeringWhell implements SteeringWhell{private String name=null;public AoDiSteeringWhell(String name) {this.name=name;}@Overridepublic void steeringWhell() {System.out.println(name+"的方向盘");}}
public class BaoMaSteeringWhell implements SteeringWhell{private String name=null;public BaoMaSteeringWhell(String name) {this.name=name;}@Overridepublic void steeringWhell() {System.out.println(name+"的方向盘");}
}
抽象工厂类:
public interface AbstractFactory {/** 创建Motor对象*/public Motor creatMotor();/** 创建Tyre对象*/public Tyre creatTyre();/** 创建SteeringWhell对象*/public SteeringWhell creatSteeringWhell();}
实现类:
public class AoDiFactory implements AbstractFactory{@Overridepublic Motor creatMotor() {// TODO Auto-generated method stubreturn new AoDiMotor("奥迪");}@Overridepublic Tyre creatTyre() {// TODO Auto-generated method stubreturn new AoDiTyre("奥迪");}@Overridepublic SteeringWhell creatSteeringWhell() {// TODO Auto-generated method stubreturn new AoDiSteeringWhell("奥迪");}}
public class BaoMaFactory implements AbstractFactory{@Overridepublic Motor creatMotor() {// TODO Auto-generated method stubreturn new BaoMaMotor("宝马");}@Overridepublic Tyre creatTyre() {// TODO Auto-generated method stubreturn new BaoMaTyre("宝马");}@Overridepublic SteeringWhell creatSteeringWhell() {// TODO Auto-generated method stubreturn new BaoMaSteeringWhell("宝马");}}
品牌厂家制造车类:
</pre><pre name="code" class="java">public class CarEngineer {//车需要的发动机private Motor motor=null;//车需要的轮胎private Tyre tyre=null;//车需要的方向盘private SteeringWhell steeringWhell=null;public void makeCar(AbstractFactory af){this.motor=af.creatMotor();this.tyre=af.creatTyre();this.steeringWhell=af.creatSteeringWhell();this.motor.motor();this.tyre.tyre();this.steeringWhell.steeringWhell();}}
测试:
public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//品牌厂家CarEngineer carEngineer=new CarEngineer();//客户1选的牌子AbstractFactory aoDi=new AoDiFactory();//客户2选的牌子AbstractFactory baoMa=new BaoMaFactory();//厂家推出System.out.println("客户1:");carEngineer.makeCar(aoDi);System.out.println("客户2:");carEngineer.makeCar(baoMa);}}
运行结果:
创建型模式--抽象工厂模式相关推荐
- 每天学习一个设计模式(八):创建型之抽象工厂模式
目录 一.基本概念 二.通俗解释 三.应用场景 1.使用简单工厂模式的解决方案 2.抽象工厂模式 抽象工厂模式结构 在什么情况下应当使用抽象工厂模式 抽象工厂模式的起源 四.抽象工厂模式的优缺点 抽象 ...
- 创建型设计模式——抽象工厂模式
1.什么是抽象工厂模式? 抽象工厂模式: 定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 从设计层面看,抽 ...
- 创建型模式——抽象工厂模式
一. 实验目的与要求 1.练习使用工厂模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 手机CPU生产工厂:在 ...
- 创建型模式-抽象工厂模式
抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...
- 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式
文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑 在面向对 ...
- 设计模式-创建型模式-抽象工厂模式
工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...
- 创建型设计模式之工厂模式
文章目录 一.工厂设计模式 二.工厂设计模式详解 1.简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 总结 一.工厂设计模式 工厂模式就类比实际生活中的工厂,在实际生活中,用户从来不会关系一个物 ...
- Java设计模式—工厂方法模式抽象工厂模式
工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...
- 软件设计模式之工厂模式抽象工厂模式
一.工厂模式 工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 工厂方法模式的关键是在一个接口或抽象类中 ...
- Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式
本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...
最新文章
- [PHP]php基础练习题学习随笔
- Unity3d载入外部图片文件
- Android 获取SD卡路径和判断SD卡是否存在.
- IO Streams:缓冲流
- linux笔记之 raid
- 实现工具自由!开源的桌面工具箱
- ffmpeg 音乐循环_[宜配屋]听图阁
- 2015/8/29 Python基础(3):数值
- SQLServer2008设置开启INTERNET远程连接
- 计算机和机械交叉学科会议期刊,机器视觉相关的研究团队
- 零基础自学SQL课程 | SQL中的日期函数大全
- 【很简单的教程】如何提取模型每层的特征【以ResNet为例】
- PS cc 2018安装教程
- js生成8位随机字符串密码
- 苹果致力于手势再生研发,无须使用控制器即可与 ARKit 交互?
- 关于推送消息的简要分析
- centos7 配置ssh
- cmd批处理,webStrom/phpStrom/.....IDE工具编译
- virtualbox7虚拟机中安装苹果macOS big sur系统详细教程
- 6款超实用的工具,职场小白也会用!