当前位置: 首页 > news >正文

设计网站公司湖南岚鸿公司上海网站建设开发公

设计网站公司湖南岚鸿公司,上海网站建设开发公,广西建设网官网住房和城乡厅官网官方网,网络文化经营许可证变更法人在开发组件的时候比如button、text等,需要对这些组件做比较多的初始化工作,比如初始化长度等。传统的开发方案如下: 图 传统开发方案UML 上面的方案组件创建及组件的其他业务操作耦合在一起,违背了单一职责原则;在客户…

 在开发组件的时候比如button、text等,需要对这些组件做比较多的初始化工作,比如初始化长度等。传统的开发方案如下:

图 传统开发方案UML

上面的方案组件创建及组件的其他业务操作耦合在一起,违背了单一职责原则;在客户端Client需要知道具体的组件类名,才能创建对应的组件。

1 工厂方法模式概述

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级。

图 工厂方法模式UML

Product: 抽象产品类,是工厂模式所创建对象的超类型,也是产品对象的公共父类。

ConcreteProduct: 具体的产品类,由专门的具体工厂创建,具体工厂和具体产品之间一一对应。

Factory: 抽象工厂类,声名了创建产品的方法,是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。

ConcreteFactory: 具体的工厂类,实现了抽象工厂类中定义的工厂方法,可有客户端调用,返回一个具体产品类的实例。

1.1 工厂方法模式实现上述需求

public abstract class Module {private double width;private double height;private String name;public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return name + "{" +"width=" + width +", height=" + height +'}';}
}public class ButtonModule extends Module{}public class TextModule extends Module{
}/*** 在开发组件的时候比如button、text等,需要对这些组件做比较多的初始化工作,比如初始化长度等。*/
public interface Factory {Module create();}public class ButtonFactory implements Factory{@Overridepublic Module create() {ButtonModule module = new ButtonModule();module.setHeight(100.0);module.setName("button");// 其他初始化工作return module;}
}public class TextFactory implements Factory{@Overridepublic Module create() {TextModule textModule = new TextModule();textModule.setName("text");textModule.setHeight(123);//其他初始化操作return textModule;}
}

为了让系统具有更好的灵活性和可扩展性,客户端创建工厂对象时不再通过new关键字,而是通过存储在配置文件里的具体工厂类的类名,使用反射机制来创建具体的工厂。优化如下:

<?xml version="1.0" encoding="UTF-8"?>
<config><className>com.huangmingfu.factory_method.ButtonFactory</className>
</config>public class FactoryMethodXmlUtil {public static Object getBean() {try {DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = dFactory.newDocumentBuilder();Document document = documentBuilder.parse(FactoryMethodXmlUtil.class.getClassLoader().getResourceAsStream("factory_method/concrete-factory.xml"));NodeList nodeList = document.getElementsByTagName("className");Node node = nodeList.item(0).getFirstChild();String className = node.getNodeValue();Class<?> aClass = Class.forName(className);return aClass.newInstance();} catch (Exception e) {e.printStackTrace();return null;}}}public class Client {public static void main(String[] args) {Factory factory;factory = (Factory) FactoryMethodXmlUtil.getBean();assert factory != null;System.out.println(factory.getClass());Module module = factory.create();System.out.println(module);}}

2 优缺点

2.1 优点

1)向客户隐藏了产品类实例化细节,用户只需关心所需产品对应的工厂,无须关心创建细节,甚至无需知道具体产品类的类名;

2)扩展性好,符合开闭原则。

2.2 缺点

1)添加新的产品时,需要编写新的具体产品类及对应的具体工厂类,使得系统中类的个数成对增加,增加了系统复杂度及开销。

3 适用场景

  1. 客户不知道所需要的对象的类,只知道所对应的工厂。
  2. 对象创建时,需初始化操作多。
http://www.yayakq.cn/news/454824/

相关文章:

  • 盐城专业做网站的公司哪家好腾讯云的wordpress安装目录
  • 新开的公司做网站多少钱网页设计与制作教程期末考试
  • 厦门网站建设哪家专业网页界面设计招聘
  • sem代运营托管公司Wordpress图片加载优化
  • 合肥瑶海区网站建设费用外贸出口工艺品怎么做外贸网站
  • 哈尔滨网站建设制作哪家便宜站长平台网站
  • 推广网站要注意什么重庆公司注册费用是多少
  • 申请一个网站得多钱wordpress 动画模板
  • 个人网站需要哪些内容医院网站建设 中标
  • 延庆青岛网站建设四会城乡建设局网站
  • 给公司做门户网站企业网站设计一般多少钱
  • 泗洪县建设局网站婚庆设备租赁网站源码
  • 在网上招标做兼职的网站网站开发相关书籍
  • 为什么做手机网站平台小程序
  • 校园加盟网站建设全球速卖通下载
  • 公司网站是用什么软件做大象2022秘密入口免费看
  • 怎么进入公司网站上海外贸推广建站
  • 爱站网关键词查询工具上海网站开发哪家好薇
  • 公司做网站需要准备什么如何网站数据备份
  • 东莞最新出入政策seo 网站改版
  • 杭州营销网站建设wordpress搜索关闭
  • 上海市建设协会考试网站如何做谷歌优化
  • 国外app界面设计网站国家工程建设质量奖网站
  • 天津企业网站建设一般多少钱怎么添加网站关键词
  • 如何对现有的网站改版澄城县城乡建设局网站
  • 做网站建设公司crm在线的提升服务wordpress企业主题破解版
  • 个人网站 做外贸展示网站方案
  • 蛋糕店的网站建设咋写sem竞价托管价格
  • 微网站开发用什么软件网站功能与内容设计的步骤
  • wordpress懒加载插件品牌营销优化