设计模式学习笔记--工厂(Factory)、建造(Builder)和原型(Prototype)(二)

2014-11-24 00:07:41 · 作者: · 浏览: 1
SmF2Yb3Tv9q78tXfs+nP88DgyrXP1qGjPGJyPgo8L3A+CjxwPqOoNKOpvt/M5bL6xrejqENvbmNyZXRlIFByb2R1Y3Sjqb3HyaujutXiuPa9x8mryrXP1sHLs+nP87L6xre9x8mry/nJ+cP3tcS907/aoaO5pLOnt723qMSjyr3L+bS0vai1xMO/0ru49rbUz/O2vMrHxLO49r7fzOWy+sa3vcfJq7XEyrXA/aGjPGJyPgo8L3A+CjxwPtei0uKjutK7uPa5pLOnt723qMSjyr21xMq1z9bSwMC109q5pLOnvcfJq7rNsvrGt73Hyau1xLbgzKzQ1KOs1NrT0NCpx+m/9s/Co6zV4rj2xKPKvb/J0tSz9s/Wzcu7r6OsxuTM2NX3vs3Kx7bgzKzQ1LXEyaXKp6Gjv8nS1M3Lu6+1xLrcz/G88rWluaSzp8Sjyr2jrL6ts6Oxu7zytaW5pLOnxKPKvbT6zOaju9Kyv8nS1M3Lu6+1xLj5sb6+zbK7yse5pLOnt723qMSjyr3By6Os16LS4sq2sfChozwvcD4KPHA+PGJyPgo8L3A+CjxoMj60+sLr0d3KvjwvaDI+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">interface Product { } class ConcreteProduct1 implements Product { public ConcreteProduct1() {} } class ConcreteProduct2 implements Product { public ConcreteProduct2() {} } interface Creator { //工厂方法 public Product factory(); } class ConcreteCreator1 implements Creator { public Product factory() { return new ConcreteProduct1(); } } class ConcreteCreator2 implements Creator { public Product factory() { return new ConcreteProduct2(); } } class Client { private static Creator c1,c2; private static Product p1,p2; public static void main(String[] args) { c1 = new ConcreteCreator1(); p1 = c1.factory(); c2 = new ConcreteCreator2(); p2 = c2.factory(); } }

工厂方法在Java中的应用


在Java容器类中应用:

Collection接口有方法iterator(),返回Iterator接口,每个实现类实现了这个iterator()方法,用于创建一个Iterator类型的对象。

URL与URLConnection的应用:

import java.net.*;
import java.io.*;

class URLConnectionReader
{
	public static void main(String[] args)
	{		
		try
		{
			URL b = new URL("http://www.baidu.com");
			URLConnection c = b.openConnection();
			BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
			String s;
			while((s = in.readLine())!=null)
			{
				System.out.println(s);
			}
			in.close();
		}
		catch (Exception e)
		{
		}		
	}
}

抽象工厂(Abstract Factory)模式


定义

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。

起源

抽象工厂模式的起源或者说最早的应用,是用于创建分属于不同操作系统的视窗构件。

更多了解

抽象工厂,是工厂的工厂,可以配备一个静态方法,按照参数,返回所对应的具体工厂的实例(抽象工厂类型)。


建造(Builder)模式


定义

建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象

结构图

\

更多了解

(1)建造模式和抽象工厂模式非常相像,两者有都是用来创建同时属于几个产品族的对象的模式。

(2)在抽象工厂模式中,每一次工厂对象被调用时都会返还一个完整的产品对象,而客户端有可能会决定把这些产品组装成一个更大更复杂的产品,也有可能不会;建造模式则不同,它一点一点地建造出一个复杂的产品,而这个产品的组装过程就发生在建造者角色的内部。换言之,抽象工厂模式处在更加具体的制度上,而建造模式则处于更加宏观的制度上。


原型(Prototype)模式


定义

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创造出更多同类型的对象,这就是原型模式的用意。

结构图--简单形式的原始模式

\

结构图--登记形式的原始模式

\

更多了解

关于原型模式,只需要深刻了解Java语言中的克隆机制,深层次克隆,浅层次克隆就可以了。实际上这种模型,就是对我们日常工作中使用克隆这种行为的总结。


创建模式(Creational Pattern)小结


创建模式(Creational Pattern)一共有七种,分布是:简单工厂模式、工厂方法模式、抽象工厂模式、建造模式、原型模式、单例模式、多例模式。


本篇介绍了其中的5种:简单工厂、工厂方法、抽象工厂、建造者、原型。