定义并明确它所要创建的是什么具体东西; 提供一个可以重新获取产品的接口: public class ConcreteBuilder implements Builder Part partA,partB,partC; public void buildPartA(){ //这里是具体如何构建partA的代码 ) public void buildPartB(){ //这里是具体如何构建partB的代码 ) public void buildPartc()( //这里是具体如何构建partB的代码 ); public Product getResult(){ //返回最后组装成品结果 }; 复杂对象:产品Product: public interface Product 复杂对象的部件: public interface Part { 我们看看如何调用Builder模式:
定义并明确它所要创建的是什么具体东西; 提供一个可以重新获取产品的接口: public class ConcreteBuilder implements Builder { Part partA, partB, partC; public void buildPartA() { //这里是具体如何构建 partA 的代码 }; public void buildPartB() { //这里是具体如何构建 partB 的代码 }; public void buildPartC() { //这里是具体如何构建 partB 的代码 }; public Product getResult() { //返回最后组装成品结果 }; } 复杂对象:产品 Product: public interface Product { } 复杂对象的部件: public interface Part { } 我们看看如何调用 Builder 模式:
ConcreteBuilder builder new ConcreteBuilder(); Director director new Director(builder ) director.construct(); Product product =builder.getResult(); Builder模式的应用 在Java实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资 源,并且这些资源需要被很多用户反复共享时,就需要使用池. "池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时 一个连接会中断),如果循环再利用这些"断肢”,将提高内存使用效率,提高池的性能.修改 Builder模式中Director类使之能诊断"断肢"断在哪个部件上,再修复这个部件
ConcreteBuilder builder = new ConcreteBuilder(); Director director = new Director( builder ); director.construct(); Product product = builder.getResult(); Builder 模式的应用 在 Java 实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资 源,并且这些资源需要被很多用户反复共享时,就需要使用池. "池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时 一个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能.修改 Builder 模式中 Director 类使之能诊断"断肢"断在哪个部件上,再修复这个部件
设计模式之Prototype 原型模式定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建 的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的 对象通过请求原型对象拷贝它们自己来实施创建。 如何使用? 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变 得很简单. 以勺子为例: public abstract class AbstractSpoon implements cloneable String spoonName; public void setSpoonName(String spoonName)(this.spoonName spoonName; public String getSpoonName()(return this.spoonName;} public object clone() { Object object null; try object =super.clone(); catch (CloneNotSupportedException exception){ System.err.println("AbstractSpoon is not Cloneable");
设计模式之 Prototype 原型模式定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype 模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建 的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的 对象通过请求原型对象拷贝它们自己来实施创建。 如何使用? 因为 Java 中的提供 clone()方法来实现对象的克隆,所以 Prototype 模式实现一下子变 得很简单. 以勺子为例: public abstract class AbstractSpoon implements Cloneable { String spoonName; public void setSpoonName(String spoonName) {this.spoonName = spoonName;} public String getSpoonName() {return this.spoonName;} public Object clone() { Object object = null; try { object = super.clone(); } catch (CloneNotSupportedException exception) { System.err.println("AbstractSpoon is not Cloneable"); }
return object; 有个具体实现(ConcretePrototype): public class SoupSpoon extends AbstractSpoon public SoupSpoon() setSpoonName("Soup Spoon"); 调用Prototype模式很简单: AbstractSpoon spoon new SoupSpoon()i Abstractspoon spoon2 spoon.clone(); 当然也可以结合工厂模式来创建AbstractSpoon实例。 在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特 性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多 模式上,如Interator遍历模式
return object; } } 有个具体实现(ConcretePrototype): public class SoupSpoon extends AbstractSpoon { public SoupSpoon() { setSpoonName("Soup Spoon"); } } 调用 Prototype 模式很简单: AbstractSpoon spoon = new SoupSpoon(); AbstractSpoon spoon2 = spoon.clone(); 当然也可以结合工厂模式来创建 AbstractSpoon 实例。 在 Java 中 Prototype 模式变成 clone()方法的使用,由于 Java 的纯洁的面向对象特 性,使得在 Java 中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多 模式上,如 Interator 遍历模式
结构模式 设计模式之Flyweight F1 yweight定义: 避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)· 为什么使用? 面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得 很庞大,比如,字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千, 无疑耗费内存,那么我们还是要“求同存异",找出这些对象群的共同点,设计一个元类,封 装可以被共享的类,另外,还有一些特性是取决于应用(context),是不可共享的,这也 Flyweight中两个重要概念内部状态intrinsic和外部状态extrinsic之分. 说白点,就是先捏一个的原始模型,然后随着不同场合和环境,再产生各具特征的具体 模型,很显然,在这里需要产生不同的新对象,所以Flyweight模式中常出现Factory模 式.Flyweight的内部状态是用来共享的,E1 yweight factory负责维护一个 F1 yweight pool(模式池)来存放内部状态的对象. Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应 用场合很多:比如你要从一个数据库中读取一系列字符串,这些字符串中有许多是重复的, 那么我们可以将这些字符串储存在Flyweight池(pool)中. 如何使用? 我们先从Flyweight抽象接口开始: public interface Flyweight public void operation(ExtrinsicState state )
结构模式 设计模式之 Flyweight Flyweight 定义: 避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 为什么使用? 面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得 很庞大,比如,字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千, 无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类,封 装可以被共享的类,另外,还有一些特性是取决于应用(context),是不可共享的,这也 Flyweight 中两个重要概念内部状态 intrinsic 和外部状态 extrinsic 之分. 说白点,就是先捏一个的原始模型,然后随着不同场合和环境,再产生各具特征的具体 模型,很显然,在这里需要产生不同的新对象,所以 Flyweight 模式中常出现 Factory 模 式.Flyweight 的内部状态是用来共享的,Flyweight factory 负责维护一个 Flyweight pool(模式池)来存放内部状态的对象. Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应 用场合很多:比如你要从一个数据库中读取一系列字符串,这些字符串中有许多是重复的, 那么我们可以将这些字符串储存在Flyweight池(pool)中. 如何使用? 我们先从 Flyweight 抽象接口开始: public interface Flyweight { public void operation( ExtrinsicState state );