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

做的好看的旅游网站设计网站导航大全

做的好看的旅游网站,设计网站导航大全,河间哪里有做网站的,wordpress小工具修改🔍 目的 使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。 🔍 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

 🔍 目的


使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。

 🔍 解释


抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口

真实世界例子

考虑由多个部分组成的计算机。 但是,我们不知道特定计算机是否真的拥有所有零件,或者仅仅是零件中的一部分。 我们的计算机是动态而且非常灵活的。

通俗的说

抽象文档模式允许在对象不知道的情况下将属性附加到对象。

维基百科

面向对象的结构设计模式,用于组织松散类型的键值存储中的对象并使用类型化的视图公开数据。 该模式的目的是在强类型语言中实现组件之间的高度灵活性,在这种语言中,可以在不丢失类型安全支持的情况下,将新属性动态地添加到对象树中。 该模式利用特征将类的不同属性分成不同的接口。

 🔍 程序示例

让我们首先定义基类DocumentAbstractDocument。 它们基本上使对象拥有属性映射和任意数量的子对象。

public interface Document {Void put(String key, Object value);Object get(String key);<T> Stream<T> children(String key, Function<Map<String, Object>, T> constructor);
}public abstract class AbstractDocument implements Document {private final Map<String, Object> properties;protected AbstractDocument(Map<String, Object> properties) {Objects.requireNonNull(properties, "properties map is required");this.properties = properties;}@Overridepublic Void put(String key, Object value) {properties.put(key, value);return null;}@Overridepublic Object get(String key) {return properties.get(key);}@Overridepublic <T> Stream<T> children(String key, Function<Map<String, Object>, T> constructor) {return Stream.ofNullable(get(key)).filter(Objects::nonNull).map(el -> (List<Map<String, Object>>) el).findAny().stream().flatMap(Collection::stream).map(constructor);}...
}

 接下来,我们定义一个枚举“属性”和一组类型,价格,模型和零件的接口。 这使我们能够为Car类创建静态外观的界面。

public enum Property {PARTS, TYPE, PRICE, MODEL
}public interface HasType extends Document {default Optional<String> getType() {return Optional.ofNullable((String) get(Property.TYPE.toString()));}
}public interface HasPrice extends Document {default Optional<Number> getPrice() {return Optional.ofNullable((Number) get(Property.PRICE.toString()));}
}
public interface HasModel extends Document {default Optional<String> getModel() {return Optional.ofNullable((String) get(Property.MODEL.toString()));}
}public interface HasParts extends Document {default Stream<Part> getParts() {return children(Property.PARTS.toString(), Part::new);}
}

我们准备介绍Car

public class Car extends AbstractDocument implements HasModel, HasPrice, HasParts {public Car(Map<String, Object> properties) {super(properties);}
}

完整示例中的Car构造和使用方式。

    LOGGER.info("Constructing parts and car");var wheelProperties = Map.of(Property.TYPE.toString(), "wheel",Property.MODEL.toString(), "15C",Property.PRICE.toString(), 100L);var doorProperties = Map.of(Property.TYPE.toString(), "door",Property.MODEL.toString(), "Lambo",Property.PRICE.toString(), 300L);var carProperties = Map.of(Property.MODEL.toString(), "300SL",Property.PRICE.toString(), 10000L,Property.PARTS.toString(), List.of(wheelProperties, doorProperties));var car = new Car(carProperties);LOGGER.info("Here is our car:");LOGGER.info("-> model: {}", car.getModel().orElseThrow());LOGGER.info("-> price: {}", car.getPrice().orElseThrow());LOGGER.info("-> parts: ");car.getParts().forEach(p -> LOGGER.info("\t{}/{}/{}",p.getType().orElse(null),p.getModel().orElse(null),p.getPrice().orElse(null)));// Constructing parts and car// Here is our car:// model: 300SL// price: 10000// parts: // wheel/15C/100// door/Lambo/300

 🔍 类图

Abstract Document Traits and Domain 

 🔍 适用性


使用抽象文档模式当

  • 需要即时添加新属性
  • 你想要一种灵活的方式来以树状结构组织域
  • 你想要更宽松的耦合系统

http://www.yayakq.cn/news/843862/

相关文章:

  • 宁波网站推广怎么做dede和wordpress
  • 汽车网站设计模板莘庄做网站
  • 怎么做souq网站广州网站建设流程
  • 搜索引擎网站推广怎么做做网店的进货网站
  • 怎么样可以做网站充值代理自做衣服网站
  • 汽车音响网站建设手表网站建设策划书
  • 顺德网站建设策划wordpress 价格
  • 分类信息网站的建设维护大连口碑最好的装修公司
  • 吉林省城乡住房建设厅网站什么是网络营销?其特点是什么?
  • 南宁网站建设公司业绩百度风云榜游戏
  • 做网站可以用自己的主机企业商城网站建设
  • 重庆网站seo营销模板jquery动画特效网站
  • 网页制作和网站建设成武菏泽网站建设
  • 荆门市城乡建设管理局网站公司网页简介
  • 千鸟云网站建设拍卖网站建设需求
  • 悬浮网站底部代码制作网站需要注意什么
  • 泉州 网站建设做网站推广有啥活动
  • 品牌设计网站建设网页制作与网站开发 实验报告
  • 做微信广告网站有哪些优化网站首页
  • 无锡公司网站建设电话外包公司排名前十
  • 推广网站详细教程网上找客户有哪些网站
  • 网站制作收费明细表洛阳市涧西区建设局网站
  • 网站建设制作开发 小程序开发定制 软件系统开发工商局加强网站建设的通知
  • 济南网站备案流程舟山工程建设信息网站
  • 做黑彩票的网站赚钱吗国外如何建立个人网站
  • 注册域名之后如何建设网站wordpress 数据库信息
  • 哪里有网站建设的文章大庆免费网站建设
  • 网站建设税收编码赣州人才网招聘找工作
  • 国外网站ip地址网站制作公司很好 乐云践新
  • 小米商城网站设计论文推广比较好的网站