抽象工厂模式实例
来源:互联网 发布:java 文件读取 编辑:程序博客网 时间:2024/05/16 15:49
题目
某软件公司欲开发一套界面皮肤库,可以对桌面软件进行界面美化。不同
的皮肤将提供视觉效果不同的按钮、文本框、组合框等界面元素,其结构如下图所示:
该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮
肤,开发人员可以在不修改既有代码的基础上增加新的皮肤。试使用抽象
工厂模式设计该皮肤库,绘制类图并编程模拟实现。
类图
编码实现
抽象工程类SkinFactory
package com.yuzhyun.test4.Abstract;public interface SkinFactory { Button getButton(); TextView gettTextView(); CheckBox getCheckBox();}
抽象产品类Button(CheckBox、TextView 类似,就不贴代码了)
package com.yuzhyun.test4.Abstract;public abstract class Button {}
具体产品类BlueButton(BlueCheckBox、BlueTextView 类似)
package com.yuzhyun.test4.Concrete;import com.yuzhyun.test4.Abstract.Button;public class BlueButton extends Button { public BlueButton() { System.out.println("Generate A BlueButton"); }}
具体工程类SummerFactory(SpringFactory类似)
package com.yuzhyun.test4.Concrete;import com.yuzhyun.test4.Abstract.Button;import com.yuzhyun.test4.Abstract.CheckBox;import com.yuzhyun.test4.Abstract.SkinFactory;import com.yuzhyun.test4.Abstract.TextView;public class SummerFactory implements SkinFactory { @Override public Button getButton() { return new BlueButton(); } @Override public TextView gettTextView() { return new BlueTextView(); } @Override public CheckBox getCheckBox() { return new BlueCheckBox(); }}
客户类Client
package com.yuzhyun.test4;import com.yuzhyun.test4.Abstract.Button;import com.yuzhyun.test4.Abstract.CheckBox;import com.yuzhyun.test4.Abstract.SkinFactory;import com.yuzhyun.test4.Abstract.TextView;import com.yuzhyun.util.XMLUtil;public class Client { public static void main(String[] args) { Button button; TextView textView; CheckBox checkBox; SkinFactory skinFactory=(SkinFactory) XMLUtil.getBean("configTest4.xml", "com.yuzhyun.test4.Concrete."); button=skinFactory.getButton(); textView=skinFactory.gettTextView(); checkBox=skinFactory.getCheckBox(); }}
配置文件读取类XMLUtil
package com.yuzhyun.util;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class XMLUtil { public static Object getBean(String configFileName,String packageName) { try { DocumentBuilderFactory dFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document document; //配置文件放在项目的根目录下,不是放在src目录下 document=builder.parse(new File(configFileName)); //获取包含类名的节点 NodeList nodeList=document.getElementsByTagName("className"); Node node= nodeList.item(0).getFirstChild(); String cName=node.getNodeValue().trim(); //通过类名生成实例对象并将其返回 //如果没有包名,会报错java.lang.ClassNotFoundException: Class class1=Class.forName(packageName+cName); Object object=class1.newInstance(); return object; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } }}
配置文件
<?xml version="1.0" encoding="UTF-8"?><config> <className>SpringFactory</className></config>
0 0
- 抽象工厂模式实例
- 抽象工厂模式简单实例
- 设计模式实例-抽象工厂模式
- 设计模式实例学习-抽象工厂模式
- 抽象工厂模式实例(C#)
- C语言实现抽象工厂模式实例
- 抽象工厂模式实例与讲解
- 工厂方法模式,抽象工厂模式,简单实例分析
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别
- 单例模式与抽象工厂模式结合实例
- 23种设计模式C++实例之抽象工厂模式
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- git学习之-----githug通关记录(1-20关)
- Css基础
- 细数JDK里的设计模式
- 大二上学期咸鱼的总结
- 选择排序
- 抽象工厂模式实例
- 回文数
- TensorFlow20: 使用深度学习破解字符验证码
- 毕设商城后台管理需求说明
- ztree的反选
- 关于BSGS一点理解
- 51nod 1414 冰雕【思维+暴力】
- WebService:编写webService使用实例
- flume安装