1,单例模式: 1,构造方法为私有; 2,有个getInstance()方法返回唯一的实例(整个系统唯一)
//a,饿汉式单例,一般java中使用饿汉模式
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
//b,懒汉式单例,一般C#中使用懒汉模式
public class Singleton {
private static Singleton singleton;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
2,工厂方法模式: 有工厂接口,有产品接口, 产品实例由工厂的createProduct()方法得到
interface IProduct {
public void productMethod();
}
class Product implements IProduct {
public void productMethod() {
System.out.println("产品");
}
}
interface IFactory {
public IProduct createProduct();
}
class Factory implements IFactory {
public IProduct createProduct() {
return new Product();
}
}
public class Client {
public static void main(String[] args) {
IFactory factory = new Factory();
IProduct prodect = factory.createProduct();
prodect.productMethod();
}
}
3,简单工厂模式: 与工厂方法的区别就是 1,没有工厂接口, 2,工厂中有一个实例化产品的静态方法
举例: Calendar.getInstance() 就是典型的简单工厂模式: 工厂(Calender)有个一个静态的方法getInstance()得到不同的产品(Calender实例)
PS: 这个例子有点特殊工厂(Calendar)和产品(Calendar)是同一个类
PS: 如果每次调用 Calendar.getInstance() 得到不一样的实例就是简单工厂模式; 如果得到的实例是同一个实例那就是单例模式 ; 如果工厂(Calendar)要从接口(ICalendar)实例化那就是工厂方法模式
4,抽象工厂方法模式:
//产品1
interface IProduct1 {
public void show();
}
//产品2
interface IProduct2 {
public void show();
}
class Product1 implements IProduct1 {
public void show() {
System.out.println("这是1型产品");
}
}
class Product2 implements IProduct2 {
public void show() {
System.out.println("这是2型产品");
}
}
//只有一个工厂,却能实例化多个产品
interface IFactory {
public IProduct1 createProduct1();
public IProduct2 createProduct2();
}
class Factory implements IFactory{
public IProduct1 createProduct1() {
return new Product1();
}
public IProduct2 createProduct2() {
return new Product2();
}
}
public class Client {
public static void main(String[] args){
IFactory factory = new Factory();
factory.createProduct1().show();
factory.createProduct2().show();
}
}
就是在工厂方法里面能产生不同类型的产品 IProduct createProduct()-->IProduct1 createProduct1() 和 IProduct2 createProduct2() 等等
说白了就是: 工厂方法模式中工厂接口(IFactory)只有一个需要实现的方法 而 抽象工厂方法模式中工厂接口(IFactory)里面有多个需要实现的方法
5,原型模式: 指实现clone()方法达到复制实例的目的
以上集中模式都是创建类模式,本质上都是对对象的创建过程进行封装。
【行为类模式】
6,模版方法模式: 定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
本质: 虚方法(abstract) ; 我们定义一个接口,延迟到具体业务中去实现,也属于模版方法模式
7,中介者模式: 同事类直接的交互通过中介类来实现,就叫中介者模式
同事类: A和B如果是同事类,则: A的属性变更会影响B的属性, B的属性变更会影响A的属性
通过将中介者作为参数传入A,B中来达到A,B互相影响的目的 这种设计模式叫中介者模式
8,观察者模式:
C#的事件处理就是用观察者模式实现的,例如添加点击按钮的事件处理 btn1.click += btn1_click1; btn1.click += btn1_click2; 这样我们就给btn1添加了两个观察者btn1_click1,btn1_click2(只是这里的观察者是一个方法,一般来说观察者是一个对象)
典型的观察者模式代码:
abstract class Subject {
private Vector<Observer> obs = new Vector<Observer>();
//添加,删除观察者
public void addObserver(Observer obs){
this.obs.add(obs);
}
public void delObserver(Observer obs){
this.obs.remove(obs);
}
protected void notifyObserver(){
//通知所有的观察者
for(Observer o: obs){
o.update();
}
}
public abstract void doSomething();
}
class ConcreteSubject extends Subject {
public void doSomething(){
System.out.println("被观察者事件反生");
this.notifyObserver();
}
}
interface Observer {
public void update();
}
class ConcreteObserver1 implements Observer {
public void update() {
System.out.println("观察者1收到信息,并进行处理。");
}
}
class ConcreteObserver2 implements Observer {
public void update() {
System.out.println("观察者2收到信息,并进行处理。");
}
}
public class Client {
public static void main(String[] args){
Subject sub = new ConcreteSubject();
sub.addObserver(new ConcreteObserver1()); //添加观察者1
sub.addObserver(new ConcreteObserver2()); //添加观察者2
sub.doSomething();
}
}
动态绑定和静态绑定
子类基础父类,重写了父类的方法叫覆盖: 覆盖是动态绑定的
同一个类中,一个方法有多个实现叫重载: 重载是静态绑定的
9,命令模式:
10,责任连模式: 调用nextHandler来代替else if; 当if的判断条件比较复杂时可以用责任链模式重构
11,策略模式: 基于一个基类,实现了两个子类 这个过程就是策略模式
13,迭代器模式: foreach循环就是迭代器模式, 你如果有几个集合,你去实现他的迭代方法, 就是迭代器模式
14,解释器模式: 解释代码的执行方式,相当于java虚拟机解析java代码的过程
15,备忘录模式:
分享到:
相关推荐
在这个Java常用设计模式的文档中,我们将深入探讨以下几种模式:单例模式、工厂模式、策略模式以及观察者模式。 **单例模式**是一种限制类实例化次数的模式,确保一个类只有一个实例,并提供一个全局访问点。在Java...
这个压缩包文件"23常用设计模式的UML"提供了23个经典设计模式的统一建模语言(UML)表示,这对于理解和应用这些模式至关重要。 首先,我们要了解UML是一种标准化的图形表示法,用于系统分析、设计和建模。它通过...
### 常用设计模式及Java程序设计 #### 设计模式概述 设计模式是一种软件设计领域中的通用解决方案,用于描述解决常见设计问题的最佳实践。它不仅有助于提高代码的复用性和可读性,还能增强软件架构的灵活性和扩展...
### 设计模式的理解浅析 #### 单例模式在共享数据中的应用 单例模式是一种常用的软件设计模式,它的核心在于确保某个类只有一个实例,并提供一个全局访问点。这种模式非常适用于那些在整个项目中需要一个共享访问...
这篇博客“九种常用设计模式的应用!”探讨了九种常见的设计模式,并结合实际开发场景阐述了它们的应用。以下是对这些设计模式的详细介绍: 1. **单例模式**(Singleton):保证一个类只有一个实例,并提供一个全局...
以下是对Java中常用设计模式的详细解释: 1. **单例模式**:单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于配置管理、线程池或者数据库连接池等场景。实现方式有懒汉式(线程不安全)、...
该文件里面包含JAVA开发常用的设计模式,通过举例、分析、代码示意的方式让读者很容易理解
设计模式是软件开发中的一种重要思想,用于解决常见的设计问题并提供可复用的解决方案。在Java中,设计模式尤其重要,因为它们可以帮助我们编写出更灵活、可维护和易于扩展的代码。以下是对给定文件中提到的几种设计...
这23个常用的设计模式涵盖了创建型、结构型和行为型三大类别,是每一个Java开发者应当熟悉并掌握的基础知识。 1. **创建型设计模式**:主要包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。单例...
以上四种设计模式在实际开发中都有广泛应用,理解并熟练掌握它们能帮助开发者编写出更加灵活、可扩展且易于维护的代码。设计模式是软件工程中的宝贵财富,它们不仅仅是一套解决方案,更是软件设计思想的体现。通过...
最简单的理解设计模式,设计模式对比学习,设计模式特性分析
这里提到的"9种常用设计模式收集"涵盖了Java Web开发和Android开发中的一些核心设计原则,通过深入理解并应用这些模式,开发者可以提高代码的可读性、可维护性和可扩展性。 1. **单例模式**:单例模式确保一个类...
本篇将深入探讨标题提及的两种常用设计模式:工厂模式和单例模式。 首先,我们来看工厂模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它...
设计模式是软件工程中经过长期实践总结出的通用解决方案,它们描述了在特定情况下如何解决...通过阅读和学习提供的"常用设计模式java实现"压缩包中的例子,可以更好地理解和实践这些设计模式,从而提升Java编程技能。
文档提到的Java设计模式对开发者来说是一套系统的编程思想,它强调的是面向对象的编程理念和接口编程,通过学习设计模式可以加深对面向对象概念的理解,并能够在实际开发中更加得心应手地编写出低耦合、高内聚的代码...
### 常用设计模式及Java程序 ...总之,《常用设计模式及Java程序》是一本适合初学者和有经验的开发人员阅读的书籍,它不仅提供了理论上的指导,还有具体的实践案例,有助于加深对设计模式的理解和运用。
本资料包聚焦于“JAVA程序常用设计模式”,旨在帮助中高级JAVA程序员进一步提升编程能力。 1. 单例模式:确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式通常通过双重检查锁定、静态内部类或...
本资源包含了2016年6月20日关于Java常用设计模式的源码和作者的心得体会,这对于我们深入理解和应用这些模式具有很大的帮助。 首先,我们要了解设计模式的基本分类。设计模式分为三大类:创建型模式(Creational ...
本资源主要探讨了Ajax常用的设计模式及其实际应用场景,这对于提升Web应用的用户体验和性能至关重要。 首先,我们来了解一下Ajax的核心组成部分: 1. JavaScript:它是实现Ajax交互的关键,通过创建XMLHttpRequest...
### Java常用设计模式详解 #### 一、设计模式概述 设计模式是一种在特定情况下解决软件设计问题的经验总结,它能够帮助开发者在面对相似的问题时快速找到解决方案。设计模式大致可以分为三大类:创建型模式、结构...