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

汕头专业建站wordpress 网店主题

汕头专业建站,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/290995/

相关文章:

  • 站长工具高清无吗站长工具劲爆
  • 网站设计图能用ps做么石家庄网络推广建站
  • 网站建设需求和页面需求怎么提wordpress hpkp
  • 怎么做查询网站伦教网站设计
  • 聊城网站优化wordpress广告链接
  • 新网页游戏传奇做seo排名好的网站
  • 怎么做提高网站排名百度热搜榜第一
  • 网站的建设维护wordpress介绍
  • 微信建网站平台的动画制作可以自学吗
  • 成都建设网官方网站网站推广合作
  • 免费企业建站系统排名wordpress文本框
  • 洗头竖鞋带名片改良授权做网站不贵个体工商户年审营业执照
  • 深圳网站备案查询百度热搜广告位
  • 网站建设合同属于技术合同吗wordpress插件在哪个文件夹
  • 怎么做邮箱网站常德seo快速排名
  • 网站seo具体怎么做?家电网站策划
  • 做网站成功wordpress 标题字体大小
  • 企业做网站有用吗天涯南宁门户网站有哪些
  • 深圳手机网站建设多少钱网站首页模板图片
  • 局域网网站建设步骤爱网盘
  • 个人网站建设作用网络营销案例成功案例
  • 全椒做网站六安建设局网站
  • 优秀个人网站设计营销型集团网站建设
  • 要如何关闭公司网站 撤销备案维护网站是什么工作
  • 做excel的网站炒股配资网站开发
  • 天猫网站建设的意义揭阳企业自助建站系统
  • 网站12栅格系统怎么做互联网推广怎么找客户
  • 网站推广方法素材公益网站设计
  • 做知识产权相关的网站深圳市公司排名
  • 局网站建设情况有了主机如何做网站