装饰模式
来源:互联网 发布:宠物用品软件 编辑:程序博客网 时间:2024/06/05 20:28
简单的手机(SimplePhone)再接收到来电的时候,会发出声音提醒主人;而现在我们需要为该手机添加一项功能,在接收来电的时候,除了声音还能产生振动(JarPhone);还可以得到更高级的手机(ComplexPhone),来电的时候,它不仅能够发声,产生振动,而且还有灯光在闪烁提示。现在用装饰模式来模拟一下手机的升级过程,要求绘制类图并编程实现。
UML图:
(1)Role类
public class Role { private String sex; private String face; private String clothing; private String hairStyle; public void setSex(final String sex) { this.sex = sex; } public void setFace(final String face) { this.face = face; } public void setClothing(final String clothing) { this.clothing = clothing; } public void setHairStyle(final String hairStyle) { this.hairStyle = hairStyle; } public String getSex() { return this.sex; } public String getFace() { return this.face; } public String getClothing() { return this.clothing; } public String getHairStyle() { return this.hairStyle; }}
(2)RoleBuilder类
public abstract class RoleBuilder { protected Role role = new Role(); public abstract void buildeSex(); public abstract void buildeFace(); public abstract void buildeClothing(); public abstract void buildeHairStyle(); public Role getRole() { return role; }}
(3)BuilderMan类
public class BuilderMan extends RoleBuilder { public void buildeSex() { role.setSex("male"); } public void buildeFace() { role.setFace("圆脸"); } public void buildeClothing() { role.setClothing("西装"); } public void buildeHairStyle() { role.setHairStyle("短发"); }}
(4)BuilderWoman类
public class BuilderWoman extends RoleBuilder { public void buildeSex() { role.setSex("female"); } public void buildeFace() { role.setFace("圆脸"); } public void buildeClothing() { role.setClothing("短裙"); } public void buildeHairStyle() { role.setHairStyle("卷发"); }}
(5) RoleController类
public class RoleController { private RoleBuilder roleBuilder; public void setRoleBuilder(final RoleBuilder roleBuilder) { this.roleBuilder = roleBuilder; } public Role construct() { roleBuilder.buildeSex(); roleBuilder.buildeFace(); roleBuilder.buildeClothing(); roleBuilder.buildeHairStyle(); return roleBuilder.getRole(); }}
(6)XMLUtil类
import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;public class XMLUtil { public static Object getBean() { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc; doc = builder.parse(new File("config.xml")); NodeList nodeList = doc.getElementsByTagName("className"); Node node = nodeList.item(0).getFirstChild(); String cname = node.getNodeValue(); System.out.println(cname); Class c = Class.forName(cname); Object object = c.newInstance(); System.out.println(c.getName()); return object; } catch (Exception e) { e.printStackTrace(); return null; } }}
(7)Client类
public class Client { public static void main(final String[] a) { RoleBuilder roleBuilder = (RoleBuilder) XMLUtil.getBean(); RoleController roleController = new RoleController(); roleController.setRoleBuilder(roleBuilder); Role role = roleController.construct(); System.out.println("创建人物角色:"); System.out.println(role.getSex()); System.out.println(role.getFace()); System.out.println(role.getClothing()); System.out.println(role.getHairStyle()); }}
(8)config.xml
<?xml version="1.0" encoding="UTF-8"?><config><className>BuilderWoman</className></config>
运行结果:
阅读全文
0 0
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 数据结构实验之查找一:二叉排序树
- c中打开文件
- hibernate3 @Id 与 @Column位置的问题
- 入库时效列表
- 常见zz错误
- 装饰模式
- 第一个项目
- 栗酱的异或和(取石子问题)
- 人脸识别之人脸检测(十四)--MTCNN
- HDU 1421 搬寝室 (DP)
- Sublime Text3(ST3)连接ftp/sftp
- 使用Python import cv2失败 显示ImportError: DLL load failed:找不到指定的模块。
- 小白双链表
- swing java画图工具