模式概述
原型模式是一种创建型设计模式,它可以复制已有对象,而又无需依赖这些对象所属的类。意思就是可以它照着模子自己克隆
出另一个产品
,这也是它名字的由来。
问题
如果希望生成一个与现有对象完全相同的复制品,该如何实现呢?
-
首先,必须创建一个属于相同类的对象。
-
然后,必须遍历原对象的所有属性,并将其值复制到新对象中。
但如果这个要复制的对象的私有成员变量无法访问,该怎么办呢?另外,如果不知道这个复制对象属于什么类,那又该怎么办呢?
原型模式是一种创建型设计模式,它可以复制已有对象,而又无需依赖这些对象所属的类。意思就是可以它照着模子自己克隆
出另一个产品
,这也是它名字的由来。
如果希望生成一个与现有对象完全相同的复制品,该如何实现呢?
首先,必须创建一个属于相同类的对象。
然后,必须遍历原对象的所有属性,并将其值复制到新对象中。
但如果这个要复制的对象的私有成员变量无法访问,该怎么办呢?另外,如果不知道这个复制对象属于什么类,那又该怎么办呢?
作为以一种创建型模式,构建器模式可以分步骤地创建复杂对象,并使用相同的代码创建不同类型和形式的对象。
程序员们应该经常可以在一些第三方的组件中看到构建器模式的应用。
/**
* 某第三方推送应用设置
*
*/
public static PushPayload buildPushObject(String alias, String content) {
return PushPayload.newBuilder()
// 所有平台
.setPlatform(Platform.all())
// 向选定的人推送
.setAudience(Audience.alias(alias))
// 消息内容
.setNotification(Notification.alert(content))
.build();
}
抽象工厂是一种创建型设计模式,它能够创建一系列相关的对象而无需指定具体类。
这个定义和工厂方法模式很像,但其实是不同的。
假设公司目前正在研发一款穿搭风格模拟器,代码中有这样一些类。
一些列相关的产品,如上衣、长裤和手提包。
不同年龄段的消费者,如女大学生,职业女性和老年妇女。
就像这样(形状代表模特,仅为示意😄)。
这种设计模式在父类中提供一种创建对象的方法,让子类决定要实例化的对象类型。
就像工厂可以根据客户需求生产出产品那样,工厂方法
因此而得名。
假设目前公司正在开发一款知识付费应用,第一版只能用微信支付。但随着用户越来越多,很多用户要求能用支付宝支付。而且今后可能还需要支持余额支付、优惠券支付、积分支付和信用卡支付。
如果每增加一种支付方式就要大改一次代码,那简直是太麻烦了。
这时候就可以用工厂方法模式来解决。
单例模式
是一种创建型设计模式,它能够保证一个类在整个应用生命周期内之有且仅有一个实例,并提供一个获得该实例的方法。
当人们买了房子之后,不管在哪个行政服务中心的窗口,都只会发一份相同的证明,盖一份一样的公章,这是因为政府机构是唯一的,不然就乱套了。
一般来说,一个男人既是儿子,又是丈夫,同时还会是父亲和爷爷,也许还可能是哥哥或弟弟。如果亮出这些身份的时候都不是同一个人,那会相当麻烦(女人也一样)。
大多数网站会用访问计数器来统计浏览量,如果每次访问网站都开启一个全新的计数器,那么无论什么时候看,网站的总访问量永远都停留在1
这个数字上。所以必须使用一个全局唯一的计数器来保证浏览人数总是以累加的形式存在的。
当需要某个对象能够被多个应用共享,且这个对象还需要从始至终保留共享的状态,那么就只能以一个全局唯一的实例来提供服务,如Web配置对象、数据库连接池等。