装饰模式
来源:互联网 发布:java正则表达式捕获组 编辑:程序博客网 时间:2024/06/07 05:45
简单的手机(SimplePhone)再接收到来电的时候,会发出声音提醒主人;而现在我们需要为该手机添加一项功能,在接收来电的时候,除了声音还能产生振动(JarPhone);还可以得到更高级的手机(ComplexPhone),来电的时候,它不仅能够发声,产生振动,而且还有灯光在闪烁提示。现在用装饰模式来模拟一下手机的升级过程,要求绘制类图并编程实现。
(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
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- MockMvc详解——SpringMVC单元测试
- Linux Find命令学习实验
- C#系统XML解析
- Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty("user.dir")的理解
- HTML 根据条件查询
- 装饰模式
- MFC Base64和MD5的加密算法
- Jihosoft File Recovery(文件数据恢复软件)官方破解版V8.2.7下载 | file recovery 破解版
- [距离限制模型 & 网络流] BZOJ3144 :[Hnoi2013] 切糕
- 应用获取时间戳异常后通过系统应用修改时间
- 阿里云---阿里云服务器ECS安装jdk环境
- Nginx expires缓存
- centos 6.5 忘记root密码的解决办法
- 算法时间复杂度与空间复杂度