读书笔记_java设计模式深入研究 第三章 工厂模式 Factory

1,简单工厂

-1,定制抽象接口。

-2,定制具体子类。

-3,定制工厂类,通过工厂类的静态方法返回不同的子类对象。


package pattern.chp02.facroty;

/**

 *  类描述:汽车接口

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 10:50:10 AM   Jing   Created.

 *           

 */

public interface ICar {

    

}  

/**

 *  类描述:高档汽车

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 10:52:06 AM   Jing   Created.

 *           

 */

public class TopCar implements ICar{

 

}

/**

 *  类描述:中档汽车

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 10:52:56 AM   Jing   Created.

 *           

 */

public class MidCar implements ICar {

 

}

package pattern.chp02.facroty;

 

/**

 *  类描述:抵挡汽车

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 10:53:25 AM   Jing   Created.

 *           

 */

public class LowCar implements ICar {

 

}

/**

 *

 * @(#) CarSimpleFactory.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 * 类描述:汽车工厂类

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 10:54:16 AM Jing Created.

 * 

 */

public class CarSimpleFactory {

	/**

	 * 

	 * 方法说明:根据传入的汽车类型,返回不同的对象

	 * 

	 * Author: Jing Create Date: Dec 18, 2014 11:19:05 AM

	 * 

	 * @param carType

	 * @return

	 * @return ICar

	 */

	public static ICar createCar(CarType carType) {

		ICar obj = null;

		if (carType == CarType.TOP_CAR) {

 

			obj = new TopCar();

		} else if (carType == CarType.MID_CAR) {

 

			obj = new MidCar();

		} else if (carType == CarType.LOW_CAR) {

 

			obj = new LowCar();

		}

		return obj;

	}

}

/**

 *

 * @(#) CarType.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 * 类描述:汽车类型

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 11:14:34 AM Jing Created.

 * 

 */

public enum CarType {

	/**

	 * 高档汽车

	 */

	TOP_CAR,

	/**

	 * 中档汽车

	 */

	MID_CAR,

	/**

	 * 抵挡汽车

	 */

	LOW_CAR;

}

/**

 *

 * @(#) CarTest.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 *  类描述:

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 11:29:07 AM   Jing   Created.

 *           

 */

public class CarTest {

	

	public static void main(String[] args) {

		

		ICar obj = CarSimpleFactory.createCar(CarType.LOW_CAR);

		System.out.println(obj);//[email protected]

	}

}

2,工厂模式

-1,定义抽象接口。

-2,定义产品子类。

-3,定义抽象工厂类。

-4,实现不同产品类对应的具体工厂类。

工厂方法更加的易于软件的维护和开发,相比于简单工厂方式,不需要每次修改工厂类的方法,每次只需要增加新的产品类和产品类的工厂类即可。


package pattern.chp02.facroty;

/**

 *  类描述:抽象工厂接口

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 2:27:41 PM   Jing   Created.

 *           

 */

public abstract class AbstractFactory {

    /**

     * 

     * 方法说明:创建ICar对象

     *

     * Author:       Jing                

     * Create Date:   Dec 18, 2014 2:28:12 PM

     *

     * @return

     * @return ICar

     */

    public abstract ICar create();

}

package pattern.chp02.facroty;

 

/**

 *  类描述:高档汽车工厂类

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 2:36:38 PM   Jing   Created.

 *           

 */

public class TopFactory extends AbstractFactory {

 

	@Override

	public ICar create() {

		

		return new TopCar();

	}

 

}

public class CarTest {

	

	public static void main(String[] args) {

		

		ICar obj = CarSimpleFactory.createCar(CarType.LOW_CAR);

		System.out.println(obj);

		

		AbstractFactory factory = new TopFactory();

		ICar car = factory.create();

		System.out.println(car);//[email protected]

	}

}

3,抽象工厂

-1,抽象工厂用来一个工厂生产多种类型的汽车。


/**

 *

 * @(#) IBus.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 *  类描述:公共汽车

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:05:10 PM   Jing   Created.

 *           

 */

public interface IBus {

 

}

/**

 *

 * @(#) UpBus.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 *  类描述:高级公共汽车

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:05:46 PM   Jing   Created.

 *           

 */

public class UpBus implements IBus{

 

}

/**

 *

 * @(#) MidBus.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 *  类描述:中档公共汽车

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:17:48 PM   Jing   Created.

 *           

 */

public class MidBus implements IBus {

 

}

/**

 *

 * @(#) AbstractFactory.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 *  类描述:抽象工厂接口

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 2:27:41 PM   Jing   Created.

 *           

 */

public abstract class AbstractFactory {

	/**

	 * 

	 * 方法说明:创建ICar对象

	 *

	 * Author:       Jing                

	 * Create Date:   Dec 18, 2014 2:28:12 PM

	 *

	 * @return

	 * @return ICar

	 */

	public abstract ICar create();

	

	/**

	 * 

	 * 方法说明:创建公共汽车IBus对象

	 *

	 * Author:       Jing                

	 * Create Date:   Dec 18, 2014 3:18:58 PM

	 *

	 * @return

	 * @return IBus

	 */

	public abstract IBus createBus();

}

/**

 *

 * @(#) TopFactory.java

 * @Package pattern.chp02.facroty

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty;

 

/**

 *  类描述:高档汽车工厂类

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 2:36:38 PM   Jing   Created.

 *           

 */

public class TopFactory extends AbstractFactory {

 

	@Override

	public ICar create() {

		

		return new TopCar();

	}

 

	@Override

	public IBus createBus() {

		

		return new UpBus();

	}

 

}

4,具体应用:

编写读文件功能。读取文件,包括编码(GBK,UTF-8,UNIONCODE)的文本文件,要求获取文本内容。读取图像文件(BMP,GIF,JPG),要求获取图像宽度、高度、长度、以及每一点的RGB基色信息。

-1,首先我们可以写出一个基本的工厂类模式,如下所示,生成对应的读取总接口,以及对应的文本和图像抽象类,及对应的子列,对应子类的工厂方法,实现要求,部分代码如下:


/**

 *

 * @(#) IRead.java

 * @Package pattern.chp02.facroty.file

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.file;

 

/**

 *  类描述:读取文件接口类

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:27:54 PM   Jing   Created.

 *           

 */

public interface IRead {

	/**

	 * 

	 * 方法说明:根据文件名称读取文件 

	 *

	 * Author:       Jing                

	 * Create Date:   Dec 18, 2014 3:28:25 PM

	 *

	 * @param fileName

	 * @return void

	 */

	public void read(String fileName);

}

/**

 *

 * @(#) AbstractImgRead.java

 * @Package pattern.chp02.facroty.file

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.file;

 

/**

 * 类描述:图像读取抽象类

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 3:32:14 PM Jing Created.

 * 

 */

public abstract class AbstractImgRead implements IRead {

 

	public abstract void read(String fileName);

}

/**

 *

 * @(#) AbstractTextRead.java

 * @Package pattern.chp02.facroty.file

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.file;

 

/**

 *  类描述:获取文本文件的抽象类

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:29:14 PM   Jing   Created.

 *           

 */

public abstract class AbstractTextRead implements IRead {

 

	public abstract void read(String fileName) ;

}

/**

 *

 * @(#) BMPImgRead.java

 * @Package pattern.chp02.facroty.file

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.file;

 

/**

 *  类描述:BMP图片读取

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:35:57 PM   Jing   Created.

 *           

 */

public class BMPImgRead extends AbstractImgRead {

 

	@Override

	public void read(String fileName) {

		// TODO Auto-generated method stub

 

	}

 

}

/**

 *

 * @(#) AbstractFactory.java

 * @Package pattern.chp02.facroty.file

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.file;

 

/**

 *  类描述:工厂类

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 3:49:15 PM   Jing   Created.

 *           

 */

public abstract class AbstractFactory {

	/**

	 * 

	 * 方法说明:创建对应的文件读取实例

	 *

	 * Author:       Jing                

	 * Create Date:   Dec 18, 2014 3:49:46 PM

	 *

	 * @return

	 * @return IRead

	 */

	public abstract IRead create();

}

/**

 *

 * @(#) GBKTextFactory.java

 * @Package pattern.chp02.facroty.file

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.file;

 

/**

 * 类描述:GBK文本读取工厂类

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 3:50:24 PM Jing Created.

 * 

 */

public class GBKTextFactory extends AbstractFactory {

 

	@Override

	public IRead create() {

		return null;

	}

}

2,使用基于jdk  API的方法实现文件读写,使用反射实现生成对应的类名。


/**

 *

 * @(#) IRead.java

 * @Package pattern.chp02.facroty.read

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.read;

 

/**

 * 类描述:读文本、图像文件接口

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 4:14:28 PM Jing Created.

 * 

 */

public interface IRead<T> {

	/**

	 * 

	 * 方法说明:根据传入的文件名读取文件

	 * 

	 * Author: Jing Create Date: Dec 18, 2014 4:15:27 PM

	 * 

	 * @param in

	 * @return

	 * @return T

	 */

	T read(String... in);

}

/**

 *

 * @(#) ImageRead.java

 * @Package pattern.chp02.facroty.read

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.read;

 

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

 

import javax.imageio.ImageIO;

 

/**

 *  类描述:图像文件读取

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 5:16:26 PM   Jing   Created.

 *           

 */

public class ImageRead implements IRead<ImageInfo>{

 

	public ImageInfo read(String... in) {

		BufferedImage bi = null;

		File f = new File(in[0]);//in[0]存储文件名

		

		try {

			bi = ImageIO.read(f);

			

		} catch (IOException e) {

			e.printStackTrace();

		}

		

		int width = bi.getWidth();

		int height = bi.getHeight();

		int rgb[] = new int[width * height];

		

		bi.getRGB(0, 0, width, height, rgb, width, height);

		ImageInfo info = new ImageInfo();

		info.setWidth(width);

		info.setHeight(height);

		info.setRGB(rgb);

		

		

		return info;

	}

 

}

/**

 *

 * @(#) TextRead.java

 * @Package pattern.chp02.facroty.read

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.read;

 

import java.io.File;

import java.io.FileInputStream;

 

 

/**

 *  类描述:文本读取

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 4:17:19 PM   Jing   Created.

 *           

 */

public class TextRead implements IRead<String> {

 

	public String read(String... in) {

		

		String result = null;

		try{

			File file = new File(in[0]);

			long len = file.length();//文件长度

			FileInputStream fis = new FileInputStream(in[0]);//in[0] 存储文件名称

			byte buf[] = new byte[(int)len];

			fis.read(buf);

			result = new String(buf, in[1]);//in[1]存储编码方式

			fis.close();

		}catch(Exception e){

			

			System.out.println(e.getMessage());

		}

		return result;

	}

 

}

/**

 *

 * @(#) ImageInfo.java

 * @Package pattern.chp02.facroty.read

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.read;

 

/**

 * 类描述:图像信息

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 4:31:28 PM Jing Created.

 * 

 */

public class ImageInfo {

	/**

	 * 图像宽度

	 */

	private int width;

	/**

	 * 图像高度

	 */

	private int height;

	/**

	 * 红色分量

	 */

	private int r[][];

	/**

	 * 绿色分量

	 */

	private int g[][];

	/**

	 * 颜色分量

	 */

	private int b[][];

 

	/**

	 * 

	 * 方法说明:设置三基色信息

	 * 

	 * Author: Jing Create Date: Dec 18, 2014 4:33:51 PM

	 * 

	 * @param rgb

	 * @return void

	 */

	public void setRGB(int rgb[]) {

 

		r = new int[height][width];

		g = new int[height][width];

		b = new int[height][width];

 

		int pos = 0;

		for (int i = 0; i < height; i++) {

 

			pos = width * i;

			for (int j = 0; j < width; j++) {

 

				r[i][j] = (rgb[pos + j] & 0xff0000) >> 16;

				g[i][j] = (rgb[pos + j] & 0xff0000) >>8;

				b[i][j] = (rgb[pos + j] & 0xff0000);

			}

		}

	}

 

	/**

	 * @return the width

	 */

	public int getWidth() {

		return width;

	}

 

	/**

	 * @param width

	 *            the width to set

	 */

	public void setWidth(int width) {

		this.width = width;

	}

 

	/**

	 * @return the height

	 */

	public int getHeight() {

		return height;

	}

 

	/**

	 * @param height

	 *            the height to set

	 */

	public void setHeight(int height) {

		this.height = height;

	}

 

	/**

	 * @return the r

	 */

	public int[][] getR() {

		return r;

	}

 

	/**

	 * @param r

	 *            the r to set

	 */

	public void setR(int[][] r) {

		this.r = r;

	}

 

	/**

	 * @return the g

	 */

	public int[][] getG() {

		return g;

	}

 

	/**

	 * @param g

	 *            the g to set

	 */

	public void setG(int[][] g) {

		this.g = g;

	}

 

	/**

	 * @return the b

	 */

	public int[][] getB() {

		return b;

	}

 

	/**

	 * @param b

	 *            the b to set

	 */

	public void setB(int[][] b) {

		this.b = b;

	}

 

}

/**

 *

 * @(#) AbstractFactory.java

 * @Package pattern.chp02.facroty.read

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.read;

 

/**

 *  类描述:抽象工厂

 * 

 *  @author:  Jing

 *  @version  $Id: Exp$ 

 *

 *  History:  Dec 18, 2014 5:27:02 PM   Jing   Created.

 *           

 */

public abstract class AbstractFactory {

	/**

	 * 

	 * 方法说明:获取对应的读取对象

	 *

	 * Author:       Jing                

	 * Create Date:   Dec 18, 2014 5:30:08 PM

	 *

	 * @return

	 * @return IRead

	 */

	@SuppressWarnings("unchecked")

	public abstract IRead create();

	/**

	 * 

	 * 方法说明:使用反射,根据掺入的类名生成对应的对象

	 *

	 * Author:       Jing                

	 * Create Date:   Dec 18, 2014 5:32:59 PM

	 *

	 * @param className

	 * @return

	 * @return AbstractFactory

	 */

	static AbstractFactory create(String className){

		

		AbstractFactory factory = null;

		

		try{

			

			Class<?> clazz = Class.forName(className);

			factory = (AbstractFactory) clazz.newInstance();

		}catch(Exception e){

			

			e.printStackTrace();

		}

		return factory;

	}

}

/**

 *

 * @(#) ImageFactory.java

 * @Package pattern.chp02.facroty.read

 * 

 * Copyright ? JING Corporation. All rights reserved.

 *

 */

 

package pattern.chp02.facroty.read;

 

/**

 * 类描述:图像读取

 * 

 * @author: Jing

 * @version $Id: Exp$

 * 

 * History: Dec 18, 2014 5:30:34 PM Jing Created.

 * 

 */

public class ImageFactory extends AbstractFactory {

 

	@SuppressWarnings("unchecked")

	@Override

	public IRead create() {

		

		return new ImageRead();

	}

 

}

简而言之,工厂模式是提供一种对象的创建方式。

时间: 2024-08-06 10:10:41

读书笔记_java设计模式深入研究 第三章 工厂模式 Factory的相关文章

读书笔记_java设计模式深入研究 第七章 代理模式 Proxy

1,代理模式:一个类可以用作其他东西的接口,其他类可以通过此类去访问被代理者. 2,UML图如下: 3,角色: ISubject:抽象主题接口,该接口定义对象和它的代理共用的接口. RealSubject:真实主题角色,使实现抽象主题接口的类. Proxy:代理角色,内部含有对真实对象的引用,从而可以操作真实对象,代理对象提供与真实对象相同的接口,以便在任何时候都可以替代真实对象. 4,简单代码: package pattern.chp07.proxy;   /** * 类描述:抽象主题接口 *

读书笔记_java设计模式深入研究 第六章 桥接模式

1,桥接模式:将抽象部分与实现部分分离,使他们可以独立变化.桥接模式可以实现的是不同方式的组合完成不同的功能,方式和功能完全分离,使得相互不影响. 2,UML模型: 3,简单代码实例: /** * * @(#) IPost.java * @Package pattern.chp06.bridge.simple * * Copyright ? JING Corporation. All rights reserved. * */ package pattern.chp06.bridge.simpl

读书笔记_java设计模式深入研究 第五章 观察者模式 Observer

1,观察者模式适合解决多种对象跟踪一个对象数据变化的程序结构问题,一个称作"主题"的对象和若干个称作"观察者"的对象.在主题对象更新后会通知所有的观察者,使他们自动更新自己. 2,观察者UML类图: 3,角色解释: -1,抽象观察者(IObserver):为所有具体观察者定义接口,在得到主题通知的时候,更新观察者自身数据. -2,抽象主题(ISubject):使用数组引用维护一组观察者对象,可以增加和删除观察者,同时同志观察者自身的改变. -3,观察者(Observ

读书笔记_java设计模式深入研究 第九章 访问者模式 Vistor

1,访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变.为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的动机. 2,UML图: 3,访问者角色: IElement:抽象的事物元素功能接口,定义了固定功能方法以及可变功能方法接口. Element:具体功能的实现类. IVisitor:访问者接口,为所有访问者对象声明一个visit方法,用来代表为对象结构添加的功能,原则上可

读书笔记_java设计模式深入研究 第二章 反射

1,JDK中反射类包含的内容: -1,Class类,代表一个类. -2,Constructor,代表类的构造方法. -3,Field,代表类成员 -4,Method,代表方法. 2,统一调用形式: 一个基本的使用反射的例子如下: package com.use; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class A 

读书笔记_java设计模式深入研究 第十章 命令模式 Command

1,命令模式:主要针对需要执行的任务或用户提出的请求进行封装与抽象.抽象的命令接口描述了任务或请求的共同特征,而实现交由不同的具体命令对象完成.每个命令对象都是相互独立的,它负责完成需要执行的任务,却并不关心是谁调用的. 2,UML模型: 3,角色分析: -1,ICommander:抽象命令者,是一个接口,规定了用来封装请求的若干个方法. -2,ConcreteCommander:具体命令发送者,即命令源.实现命令接口. -3,Invoke:请求者,具体命令的管理和维护类.请求者是包含一个"命令

5分钟读书笔记之 - 设计模式 - 门面模式

门面模式有俩个作用: 简化类的接口 消除类与使用它的客户代码之间的耦合 在javascript中,门面模式常常是开发人员最亲密的朋友.它是几乎所有javascript库的核心原则,门面模式可以使库提供的工具更容易理解.使用这种模式,程序员可以间接地与一个子系统打交道,与直接访问子系统相比,这样做更不容易出错. addEvent函数是一个基本的门面,你不用在每次为一个元素添加事件监听器的时候都得针对浏览器间的差异进行检查,有了这个便利,你可以把这个添加事件的底层细节抛在脑后,而把心思集中在如何构建

5分钟读书笔记之 - 设计模式 - 适配器模式

适配器模式可以用来在现在接口和不兼容的类之间进行适配. 使用这种模式的对象又叫包装器,因为他们是在用一个新接口包装另一个对象. 在设计类的时候往往遇到有些接口不能与现有api一同使用的情况,借助于适配器,你可以不用直接修改这些类也能使用他们. 适配器的特点: 适配器可以被添加到现有代码中以协调俩个不同的接口.从表面上来看,适配器模式很像门面模式,他们都要对别的对象进行包装并改变其呈现的接口,二者之间的差别在于他们如何改变接口.门面元素展现的是一个简化接口,它并不提供额外的选择,而且有时是为了方便

【读书笔记】设计模式第6章:行为型模式2

本文主要分析了中介者模式.观察者模式.备忘录模式.访问者模式.状态模式.解释器模式,介绍它们的定义.优缺点.使用场景,以及实例代码.为了深刻地理解设计模式,最重要的还是动手编写代码. 我参照书中的例程重新构想了一些更加生动.易于理解的例子,希望大家喜欢. 代码可以通过以下链接进行浏览: http://git.oschina.net/caipeichao/java-design-pattern 这些代码都经过编译运行,保证没有错误. 中介者模式 定义 也叫调停者模式 用一个中介对象来封装一系列同事