单例模式
本博客大部分内容来于免费在线学习设计模式
1:单例模式单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。
2:单例模式问题单例模式同时解决了两个问题。所以违反了单一职责原则。
保证一个类只有一个实例。(eg:控制某些共享资源 (例如数据库或文件) 的访问权限。)
为该实例提供一个全局访问节点。例如存储重要对象的全局变量,它们在使用上十分方便,但同时也非常不安全,因为任何代码都有可能覆盖掉那些变量的内容,从而引发程序崩溃。
例:一个国家只有一个政府,不管身份是什么,而”某政府“就像全局访问节点一样。
3:单理模式结构
单例 (Singleton) 类声明了一个名为 getInstance获取实例的静态方法来返回其所属类的一个相同实例。
单例的构造函数必须对客户端 (Client) 代码隐藏。调用 获取实例方法必须是获取单例对象的唯一方式。
代码示例:
单例模式有多种创建方法:
这里列举三种:
通过枚举类型创建单例
12345public enum Singleton { INSTANCE; p ...
工厂方法模式
本博客大部分内容来于免费在线学习设计模式
1:工厂方法模式工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。
2:工厂方法模式问题举个例子:假如你现在需要不同类型的水果:例如苹果,香蕉,梨等等。现在如果没有淘宝,水果摊这一类能提供多种水果的“工厂”。那么你买苹果需要去找苹果园,买香蕉需要去找香蕉生产地,每一个水果都需要你自行联系对应的水果生成地。很麻烦不是吗,想一想水果摊这一类的“工厂”是怎么解决这问题的?
再举一个例子:
如果你开发了一款物流管理应用。假设每一种运输方法类的构建都很复杂,需要编写大量代码。在初始版本只支持一种运输方案:卡车,于是你选择直接调用多个方法来创建卡车类。后来你需要增加另一个方式:轮船。代码部分该如何处理呢?继续直接创建一个轮船类吗。那么创建轮船类的大量代码将到处都是。更糟糕的是,如果你以后需要在程序中支持另外一种运输方式,很可能需要再次对这些代码进行大幅修改。
最后,你将不得不编写繁复的代码,根据不同的运输对象类,在应用中进行不同的处理。
3:工厂方法模式解决方案工厂方法模式建议使用特殊的工厂方法代替对于对 ...
抽象工厂模式
本博客大部分内容来于免费在线学习设计模式
1:抽象工厂模式抽象工厂(AbstractFactory)模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
2:抽象工厂模式问题工厂方法模式考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。
但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。
而抽象工厂模式将考虑多等级产品的生产。将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,
3:抽象工厂模式解决方案首先,抽象工厂模式建议为系列中的每件产品明确声明接口。然后确保所有产品变体都继承这些接口,例如(所有品牌的电视机都继承电视机接口,所有品牌的空调都继承空调接口)
然后声明抽象工厂–包含系列中所有产品构造方法的接口。例如:createWasher(创建洗衣机),createTV(创建电视机)…这些方法必须返回抽象产品类型,即我 ...
生成器模式
本博客大部分内容来于免费在线学习设计模式
1:生成器模式生成器模式是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。
2:生成器模式问题在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能力、脸型、体型、服装、发型等特性都有所差异;还有汽车中的方向盘、发动机、车架、轮胎等部件也多种多样;每封电子邮件的发件人、收件人、主题、内容、附件等内容也各不相同。
解决这些问题最简单的方法是扩展基类,然后创建一系列覆盖所有参数组合的子类。但最终你将面对相当数量的子类。任何新增的参数都会让这个层次结构更加复杂。
另一种方法则无需生成子类。你可以在房屋基类中创建一个包括所有可能参数的超级构造函数,并用它来控制房屋对象 ...
原型模式
本博客大部分内容来于免费在线学习设计模式
1:原型模式原型模式是一种创建型设计模式,使你能够复制已有对象,而又无需使代码依赖它们所属的类。
2:原型模式问题如果你有一个对象,并希望生成与其完全相同的一个复制品,你该如何实现呢?首先,你必须新建一个属于相同类的对象。然后,你必须遍历原始对象的所有成员变量,并将成员变量值复制到新对象中。
但是并非所有对象都能通过这种方式进行复制, 因为有些对象可能拥有私有成员变量, 它们在对象本身以外是不可见的。
3:原型模式解决方法用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。
4:原型模式解决方案
原型 (Prototype) 接口将对克隆方法进行声明。 在绝大多数情况下, 其中只会有一个名为 clone克隆的方法。
具体原型 (Concrete Prototype) 类将实现克隆方法。 除了将原始对象 ...