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开发常用的设计模式,通过举例、分析、代码示意的方式让读者很容易理解
最简单的理解设计模式,设计模式对比学习,设计模式特性分析
收集了9种常用设计模式,能帮助理解Java Web开发、Android开发中一些机制的理解,强烈推荐下载学习,好的话麻烦顶一下。
一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,...
JAVA常用设计模式,生动形象的讲解描述,更容易理解记忆!
C#设计模式实例,列举了所有常用的设计模式实例代码,想深入理解敏捷开发的话,可以好好看看。
Java23种常用设计模式源码,并内有详细说明。非常适合初学者学习和理解Java设计模式强大之处。
用最清晰的图标 最简洁的语言 来描述了 最常用的设计模式 ,形成最有利于理解的设计模式概念
android 中常用的开发设计模式,了解常用设计模式,顺便加深设计模式的理解。
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,Proxy是代理的...
旨在培养读者良好的设计模式思维方式,加强对面向对象思想的理解。全书共分12章,首先强调了接口和抽象类在设计模式中的重要性,介绍了反射技术在设计模式中的应用。然后,从常用的23个设计模式中精选了10个进行了...
23种常用设计模式:这份学习资料包含了23种常用的设计模式,包括单例模式、工厂模式、观察者模式、代理模式等等。这些设计模式是软件开发中最常用的设计模式,掌握它们可以帮助开发人员提高软件的质量和可维护性。 ...
掌握一些最常用的设计模式,并知道何时应该使用它们及如何使用 本教程假设您熟悉 Java 语言和基本的面向对象概念,如:多态性、继承和封装。对“统一建模语言(UML)”有一定的理解也是有益的,但不是必需的;本...
对理解设计模式及使用环境有很大帮助,详见具体内容
设计模式:(常用23种-----像内功心法) 1. 设计模式不是一个知识点 2. 设计模式是一种设计经验的总结 3. 设计模式是用来解决某些场景下的某一类问题--------通用的解决方案 4. 有了设计模式之后,可以让代码更容易被...
根据mindMater,对23中常用设计模式知识,以导图的形式呈现,提升记忆点,思路清晰。帮助你快速理解常用设计模式。
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
所有的设计模式都有一些常用的特性:一个标识(a name),一个问题陈述(a problem statement)和一个解决方案(a solution)。 1、一个设计模式的标识是重要的,因为它会让其他的程序员不用进行太深入的学习就能...
阅读本书,读者能够完整地理解12个核心的设计模式和1个分析模式,了解设计模式并不是孤立存在的,多个设计模式协同工作才能创建出更加坚固的应用程序。这里所讲授的12个模式并没有涵盖所有应该学会的模式,但是...
理解设计模式,然后 对以后学java是有帮助的 理解好设计模式,对以后掌握java思想是打基础的