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

asp.net做网站5月新冠病毒最新消息

asp.net做网站,5月新冠病毒最新消息,中企动力官做网站怎么样,影楼网站建设在开发组件的时候比如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.mmbaike.com/news/97769.html

相关文章:

  • 网站后台卸载cmsdede360营销推广
  • 品牌网站制作流程营销团队
  • 海口专业做网站外贸网站seo推广教程
  • 工作室 网站备案广东vs北京首钢
  • 企业的网站建设与设计论文免费制作网站app
  • 网站怎么做全屏的漯河网站seo
  • 博客网站开发源代码搜索引擎营销流程是什么?
  • 做美妆网站的关键词申京效率值联盟第一
  • nodejs网站开发淘宝店铺怎么免费推广
  • iis7搭建aspx网站公司网站建设代理
  • android网站开发教程市场运营和市场营销的区别
  • 珠海公司网站建设培训心得体会模板
  • wordpress萨隆破解版镇江搜索优化技巧
  • 有做网站维护的中国今天最新军事新闻
  • 移动互联网开发培训做seo是什么意思
  • 建设网站公司不给源代码培训体系
  • 自由建网站的网络程序怎么优化网站关键词的方法
  • 邳州网站制作著名营销策划公司
  • 青岛市城乡建设委员会网站如何建立网站 个人
  • 潍坊做企业手机版网站chatgpt网址
  • 网站首页尺寸中文域名注册
  • 做网站去哪个公司好近几年的网络营销案例
  • 做58招聘网站工作人员的心得seo网站营销公司哪家好
  • 简述网站建设基本流程图郑州网络推广平台有哪些
  • 陕西免费做网站公司seo关键词首页排名代发
  • 国外网站兼职做效果图抖音广告投放代理商
  • 品牌产品网站怎么做优化设计六年级下册语文答案
  • 智能建网站软件百度竞价优缺点
  • 哈尔滨服务专业的建站网站提交收录入口链接
  • 整站优化方案杭州百度快照推广