`
沙舟狼客
  • 浏览: 161678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

常见模式例子

 
阅读更多

 

工厂模式

package login.sj;
class Factory{
	public static Object getObject(Class<?> class1){
		try {
			Object object = class1.newInstance();
			return object;
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}
abstract class AbsFactory{
	abstract Object create(Class<?> class1);
}
public class FactoryTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book book = (Book) Factory.getObject(Book.class);
		book.setName("xxxxx");
	}

}
 

单例模式

 

package login.sj;

class Singleton {
	private String name;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	private Singleton() {
	}

	// 在自己内部定义自己一个实例,是不是很奇怪?
	// 注意这是private 只供内部调用

	private static Singleton instance = new Singleton();

	// 这里提供了一个供外部访问本class的静态方法,可以直接访问  
	public static Singleton getInstance() {
		return instance;
	}	
	/*
	 * private static Singleton instance = null;
	 * 
	 *   public static synchronized Singleton getInstance() {
	 * 
	 *   //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次        //使用时生成实例,提高了效率!   if
	 * (instance==null)     instance=new Singleton();   return instance;   }
	 */

}

public class SingletonTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Singleton singleton = Singleton.getInstance();
		singleton.setName("test1");
		System.out.println(singleton.getName());
		
		Singleton singleton2 = Singleton.getInstance();
		singleton2.setName("test2");
		System.out.println(singleton.getName());

	}

}
 

代理模式
package login.sj;

import java.lang.reflect.InvocationTargetException;


class People{
	void say(){
		System.out.println("say");
	}
}
abstract class MyProxy{

	/**
	 * @param args
	 */
	private Class<?> class1;
	private String methodName;
	
	public Class<?> getClass1() {
		return class1;
	}
	public void setClass1(Class<?> class1) {
		this.class1 = class1;
	}
	public String getMethodName() {
		return methodName;
	}
	public void setMethodName(String methodName) {
		this.methodName = methodName;
	}
	public MyProxy(Class<?> class1,String methodName) {
		// TODO Auto-generated constructor stub
		this.class1 = class1;
		this.methodName = methodName;
	}
	public void invoke(){

		try {
			Object object = class1.newInstance();
			object.getClass().getDeclaredMethod(methodName).invoke(object);
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public abstract void after();
	public abstract void before();
}
public class ProxyTest extends MyProxy{
	public ProxyTest(Class<?> class1, String methodName) {
		super(class1, methodName);
		// TODO Auto-generated constructor stub
	}


	@Override
	public void after() {
		// TODO Auto-generated method stub
		System.out.println("方法已经被执行");
	}

	@Override
	public void before() {
		// TODO Auto-generated method stub
		System.out.println("方法执行前");
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ProxyTest proxyTest = new ProxyTest(People.class, "say");
		proxyTest.before();
		proxyTest.invoke();
	}
}
观察者模式
package login.sj;

import java.util.Observable;
import java.util.Observer;
class Book extends Observable{
	private String name;
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
		setChanged();
		notifyObservers(name);
	}
}
class ObserverT implements Observer{

	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		System.out.println(o+"----------"+arg);
		if(o instanceof Book){
			System.out.println("book name set :"+arg);
		}
	}
	
}
public class ObserverTest extends Observable{

	/**
	 * @param args
	 */
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book book = new Book();
		ObserverT observerT = new ObserverT();
		book.addObserver(observerT);
		book.setName("find");
	}

}
 

 

 

分享到:
评论
1 楼 沙舟狼客 2011-02-24  
这是我对这几种模式的理解,不知道那点不妥,希望大家指出!

相关推荐

    设计模式--工厂模式java例子

    设计模式是软件开发中的一种最佳实践,用于解决常见的设计问题并提供可重用的解决方案。在这些模式中,工厂模式尤为突出,它是一种创建型设计模式,为对象的创建提供了抽象接口,使得代码无需直接实例化具体类,而是...

    设计模式例子文档,简单易学

    这份名为"设计模式例子文档,简单易学"的资源,显然是为了帮助开发者更直观、更快速地理解和应用设计模式。设计模式并非具体的代码或库,而是一种通用的解决方案模板,可以在不同的软件开发过程中复用,以提高代码的...

    刘伟设计模式和例子

    设计模式是软件工程中的一种重要思想,它代表了在特定情境下解决常见问题的最佳实践。刘伟先生关于设计模式的讲解结合了理论与实例,帮助开发者更好地理解和应用这些模式。以下将详细介绍23种设计模式及其相关知识。...

    设计模式例子,观察者模式,建造者模式

    在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...

    模式识别的例子

    在图像处理中,二值化是一种常见的预处理技术。二值化是将图像转化为黑白两色,即图像中的每个像素只可能有两种状态,通常用0表示黑色,255表示白色。二值化的C++实现可以通过遍历图像的每个像素,将其灰度值与预设...

    设计模式例子和PPT

    在这个“设计模式例子和PPT”压缩包中,包含的内容主要是关于设计模式的基本原则、UML类图以及一些实际的应用示例。 设计模式分为三大类:创建型模式、结构型模式和行为型模式。每种模式都有其特定的目标和适用场景...

    各个版本的 设计模式 带例子

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。这些模式在不同的编程语言中都有应用,而在这个压缩包中,我们重点关注的是与Java相关的设计模式。设计模式通常分为三大类:创建型...

    工厂模式与观察着模式的两个例子

    在软件开发中,设计模式是解决常见问题的模板或蓝图,它们是经过验证的最佳实践,可以提高代码的可读性、可维护性和可扩展性。本篇将详细讲解工厂模式和观察者模式,并通过C#语言实现的示例来帮助初学者理解这两种...

    patternDesign设计模式例子源码

    "patternDesign设计模式例子源码"这个压缩包很可能是包含了一些常见设计模式的实际应用示例,如单例模式、工厂模式、观察者模式等。下面我们将深入探讨这些设计模式及其重要性。 1. **单例模式**:单例模式确保一个...

    二十一种设计模式java例子

    在软件开发领域,设计模式是经验丰富的开发者们在面对常见问题时总结出的解决套路,它们代表了在特定上下文中经过验证的解决方案。本资源"二十一种设计模式java例子"聚焦于Java语言中的设计模式应用,结合源码与实用...

    Java设计模式例子

    在"Java设计模式例子"的压缩包中,`src`目录很可能包含了上述各种设计模式的实现代码,你可以通过查看这些代码来深入理解每种模式的工作原理和使用场景。实践中,灵活运用设计模式可以提高代码的可读性、可维护性和...

    常用设计模式例子.zip

    标题中的"常用设计模式例子.zip"表明这个压缩包包含了一些常见的设计模式的实际示例代码。让我们逐一探讨这些模式: 1. **工厂模式**:工厂模式是创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,...

    设计模式的几个简单例子

    在软件设计中,设计模式是一种解决常见问题的模板或最佳实践。它们是经过验证的解决方案,可以帮助开发者在设计系统时保持灵活性和可扩展性。在这个主题中,我们将深入探讨两种设计模式:Abstract Factory(抽象工厂...

    java工厂模式例子描述

    Java工厂模式是一种设计模式,主要用于解决对象创建的问题。在编程中,当系统无法预见需要创建哪种类型的实例,...在实际项目中,尤其是在需要动态切换产品实现或者存在多种产品变体的情况下,工厂模式的应用尤为常见。

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    在软件开发中,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。这些模式提供了可重用的模板,可以提高代码的可读性、可维护性和灵活性。以下是关于JAVA设计模式中提及的四种模式——工厂模式、...

    设计模式的适配器模式的例子

    这种模式在实际开发中非常常见,尤其在处理遗留系统、第三方库或者需要整合多种技术时。 适配器模式分为类适配器和对象适配器两种类型。类适配器模式是通过继承目标类(即期望接口)并组合适配者类来实现,而对象...

    工厂模式dao模式操作数据库小例子

    在Java编程领域,设计模式是解决常见问题的模板,提供了可重用的解决方案。工厂模式和DAO(Data Access Object)模式是两种常见的设计模式,它们在处理数据库操作时发挥着关键作用。本示例旨在帮助初学者理解如何...

    文档编辑器,设计模式例子Jexi

    标题中的“文档编辑器,设计模式例子Jexi”指的是一个使用Java编程语言实现的软件项目,该项目旨在模仿名为Lexi的文档编辑器,并且它巧妙地应用了设计模式来构建其架构。设计模式是在软件工程中经过验证的解决常见...

    java常用23种设计模式(含源码解说).rar_java常见设计模式23中(含例子代码)

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结,能够提升代码的可读性、可维护性和复用性。这个压缩包“java常用23种设计模式(含源码解说).rar”包含了对Java开发者极其重要的23...

Global site tag (gtag.js) - Google Analytics