java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式
抽象工厂模式的适用:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
示例说明:
有三种抽象的产品:墙、门、房间。
对这三种抽象产品有两组具体实现:卧室和起居室。
那么,我们的抽象工厂就可以根据客户的指令(即调用参数)去生产卧室和起居室的房间(墙和门包括在房间里)。
测试启动类:
package com.alex.designpattern.abstractfactory;
/** *//**
* 抽象工厂模式
*
* 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
*
* @author huqi
* @serialData 2007
*/
public class Test ...{
public static void main(String[] args) throws Exception ...{
// ----- Create Living Room
Room myLivingRoom = AbstractRoomFactory.createRoom("LivingRoom");
AbstractRoomFactory.showRoom(myLivingRoom);
// ----- Create Bed Room
Room myBedRoom = AbstractRoomFactory.createRoom("BedRoom");
AbstractRoomFactory.showRoom(myBedRoom);
}
}
抽象产品:
package com.alex.designpattern.abstractfactory;
/** *//**
* The Abstract Class of Wall
*/
public interface Wall ...{
public String getName();
}
package com.alex.designpattern.abstractfactory;
/** *//**
* The Abstract Class of Door
*/
public interface Door ...{
public String getName();
}
package com.alex.designpattern.abstractfactory;
/** *//**
* The Abstract Class of Room
*/
public interface Room ...{
public Wall getWall();
public Door getDoor();
}
实际产品_1
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Room - Bed Room
*/
public class BedRoom implements Room ...{
public BedRoom() ...{
System.out.println("Initiated a bedroom.");
}
public Door getDoor() ...{
return new BedRoomDoor();
}
public Wall getWall() ...{
return new BedRoomWall();
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Door for Bed Room
*/
public class BedRoomDoor implements Door ...{
private String doorName;
public BedRoomDoor() ...{
doorName = "BedRoomDoor";
}
public String getName() ...{
return doorName;
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Wall for Bed Room
*/
public class BedRoomWall implements Wall ...{
private String wallName;
public BedRoomWall() ...{
wallName = "BedRoomWall";
}
public String getName() ...{
return wallName;
}
}
实际产品_2
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Room - Living Room
*/
public class LivingRoom implements Room ...{
public LivingRoom() ...{
System.out.println("Initiated a livingroom.");
}
public Door getDoor() ...{
return new LivingRoomDoor();
}
public Wall getWall() ...{
return new LivingRoomWall();
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Door for Living Room
*/
public class LivingRoomDoor implements Door ...{
private String doorName;
public LivingRoomDoor() ...{
doorName = "LivingRoomDoor";
}
public String getName() ...{
return doorName;
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Wall for Living Room
*/
public class LivingRoomWall implements Wall ...{
private String wallName;
public LivingRoomWall() ...{
wallName = "LivingRoomWall";
}
public String getName() ...{
return wallName;
}
}
最后,当然就是抽象工厂咯,不过要注意,这个抽象工厂的意思并不是这个“工厂”是抽象的,而是这个“工厂”加工的“产品”是来自于抽象的。
package com.alex.designpattern.abstractfactory;
/** *//**
* A Room Maker to test our simple Room Abstract Factory.
*
* @author huqi
* @serialData 2007
*/
public abstract class AbstractRoomFactory ...{
public static Room createRoom(String roomType) throws Exception ...{
if (roomType.equals("LivingRoom")) ...{
return new LivingRoom();
} else if (roomType.equals("BedRoom")) ...{
return new BedRoom();
} else ...{
throw new Exception("No this type room: " + roomType);
}
}
public static void showRoom(Room room) ...{
Door door = room.getDoor();
System.out.println("Room door name is: " + door.getName());
Wall wall = room.getWall();
System.out.println("Room wall name is: " + wall.getName());
}
}
java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式相关推荐
- 23种经典设计模式都有哪些,如何分类?Java设计模式相关面试
23种经典设计模式都有哪些,如何分类? 23种经典设计模式都有哪些,如何分类? java常用的设计模式?说明工厂模式 Java 中的23 种设计模式: Factory(工厂模式), Builder(建 ...
- 23种经典设计模式的原理、背后的思想、应用场景(下)
对程序员来说,除了算法,设计模式也是提升代码能力的关键技能,今天我就想跟你聊聊 23种经典的设计模式. 23种经典设计模式共分为3种类型,分别是创建型.结构型和行为型.今天,我们把这3种类型分成3个对 ...
- C++之23种经典设计模式(一)
C++之23种经典设计模式(一) C++之23种经典设计模式(一) 单例模式(Singleton) 原型模式(Prototype) 工厂模式(Factory) C++之23种经典设计模式(一) 在偶然 ...
- 设计模式之委派模式(不属于23种经典设计模式之一)
介绍 标准定义:委派模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性,并且调用B中的方法.属性就是调用A中同名的方法和属性.B好像就是一个受A授权委托的中介.第三方的代 ...
- Java两种设计模式_23种设计模式(11)java策略模式
23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...
- [设计模式] GoF 23种经典设计模式
原文链接:https://www.yuque.com/cppdev/patterns/zainii 「GOF设计模式」Gang of Four,四人帮.设计模式的经典书籍<设计模式--可复用面向 ...
- java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...
写在前面:设计模式源于生活,而又高于生活! 为什么要使用设计模式重构代码 使用设计模式可以重构整体架构代码.提高代码复用性.扩展性.减少代码冗余问题. Java高级工程师装逼的技能! 什么是策略模式 ...
- [转]23种经典设计模式的java实现_5_职责链模式
对于职责链模式,一般是这么定义的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,即--将这些对象连成一条(处理)链,并沿着这条链传递该请求,直到这条链结束同时有一个对象处理它 ...
- 23种经典设计模式的java实现_3_桥接模式
桥接模式的适用: 你不希望在抽象和它的实现部分之间有一个固定的绑定关系.例如:程序的实现部分在运行时需要被选择或者切换. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.这时Bridge模式 ...
最新文章
- 深度学习计算机视觉常见的29道面试题及解析
- 渗透攻击(NT/2000系统)
- java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...
- 有关mysql的开发介绍_深入浅出MySQL之开发篇(二)
- 机器学习基础算法11-Logistic回归-ROC和AUC分类模型评估-实例
- 『动态规划』最大子段和
- MySQL图书借阅系统项目数据库建库表语句(组合主键、外键设置)
- 纸壳cms php,纸壳CMS 3.4 发布,电商功能增强
- word2016+endnoteX7的安装与配置
- SAP中物料需求计划不考虑库存策略应用案例
- 飞信登录时SIPC认证失败解决
- 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
- flink stream 终于上local 集群 运行起来
- 台式计算机打印机共享,如何连接共享打印机,教您电脑如何连接共享打印机
- 2022年国赛B题(处女作---河南省级三等奖)
- RIKIBOT-FX4多线激光雷达用谷歌cartographer构建3D地图
- 单片机测量NTC热敏电阻温度的方法(含程序代码)
- AI二次开发C#使用RGBColor
- C语言自定义打印宏函数
- 红米K30S Ultra的root步骤 之二(MIUI 13.0.1 稳定版 安卓12)
热门文章
- leetcode 452. Minimum Number of Arrows to Burst Balloons | 452. 用最少数量的箭引爆气球(左程云:最大线段重合问题)
- 左神算法:环形单链表的约瑟夫问题(Java版)
- Redis实战(一):Redis一键安装脚本,Redis 介绍及 NIO 原理介绍
- 带你理清 Java 混乱的日志体系 - log4j、logback、log4j2、jcl、SLFJ 究竟是啥关系?
- 安全声明标记语言SAML2.0初探
- Leet Code OJ 125. Valid Palindrome [Difficulty: Easy]
- mysql的水平分表和垂直分表的区别
- C/C++数组指针和指针数组
- jQuery.ready() 函数详解
- SpringMvc执行过程