java设计模式23种常见经典设计模式面编程语言

设计模式分为三种类型,共23种:
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式

结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式

本文主要讲解的是:

创建型模式:单例模式、建造者模式、工厂模式、

结构型模式:适配器模式、代理模式

行为型模式:模板方法模式、策略模式

对应的GitHub项目地址:https://github.com/kkzhilu/DesignPattern

可以下载进行深入的理解

创建型模式例子
单例模式:
对应的类: SingleTon.java

扫描二维码关注公众号,回复: 7285949 查看本文章

参考博客:http://www.runoob.com/design-pattern/singleton-pattern.html

/***
* 创建型模式 ---- 单例模式
*
* @author kxm
*/
public class SingleTon {
/***
* 单例设计模式的一般定义:一个类中只允许有一个实例。 实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。
*
* 懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要) 饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)
*
* 懒汉式线程不安全,需要加上同步锁,同步锁影响了程序执行效率 饿汉式天生线程安全,类加载的时候初始化一次对象,效率比懒汉式高。
*
* 注意私有构造方法
*/
// 定义成私有构成方法,变成单例的 单例模式的核心
private SingleTon() {}

// 饿汉式:类加载的时候即进行初始化
private static final SingleTon single = new SingleTon();

public static SingleTon getTeacher() {
return single;
}

/******************************* 分割线 *********************************/
// 懒汉式 双重校验锁保证线程安全,比较好的写法 --- volatile 禁止指令重排 主要由于new SingleTon();可能出现问题
private volatile static SingleTon myTest = null;

public static SingleTon geTest() {
if (myTest == null) {
synchronized (SingleTon.class) {
if (myTest == null) {
myTest = new SingleTon();
}
}
}
return myTest;
}


/***
* 较为标准的写法 --- 静态内部类写法
* 是否 Lazy 初始化:是
* 是否多线程安全:是
* @author kxm
*/
private static class SingletonHolder {
private static final SingleTon INSTANCE = new SingleTon();
}
public static final SingleTon getInstance() {
return SingletonHolder.INSTANCE;
}
}
工厂模式:
简单工厂 --- SimpleFactoryTon.java:

/***
* 创建型模式 ---- 工厂模式 (简单工厂模式)
* @author kxm
*/
public class SimpleFactoryTon {
public Car creatCarFactory(int num) {
Car car = null ;
switch (num) {
case 1:
car = new Car("东风雪铁龙");
break;
case 2:
car = new Car("东风雪铁龙","红色");
break;
default:
car = new Car();
break;
}
return car;
}
}


class Car{
private String band;
private String color;
public Car() {}
public Car(String band) {
this.band = band;
}
public Car(String band, String color) {
this.band = band;
this.color = color;
}
public String getBand() {
return band;
}
public void setBand(String band) {
this.band = band;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
工厂方法模式:

参考博客:https://www.jianshu.com/p/d0c444275827

abstract class Factory{
public abstract Product Manufacture();
}

public class FactoryA extends Factory {

@Override
public Product Manufacture() {
return new ProductA();
}
}

public class FactoryB extends Factory {

@Override
public Product Manufacture() {
return new ProductB();
}
}

abstract class Product{
public abstract void Show();
}

public class ProductA extends Product {

//具体产品A类
@Override
public void Show() {
System.out.println("生产出了产品A");
}
}

public class ProductB extends Product {

//具体产品B类
@Override
public void Show() {
System.out.println("生产出了产品B");
}
}

/**
* 创建型模式 ---- 工厂模式 (工厂方法模式)
* 相比简单工厂的优点:
* 更符合开-闭原则
* 符合单一职责原则
* 不使用静态工厂方法,可以形成基于继承的等级结构
*
* 参考文档:https://www.jianshu.com/p/d0c444275827
* @author kxm
*/
public class TestFactory {

public static void main(String[] args) {
//客户要产品A
FactoryA mFactoryA = new FactoryA();
mFactoryA.Manufacture().Show();

//客户要产品B
FactoryB mFactoryB = new FactoryB();
mFactoryB.Manufacture().Show();
}
}
 

建造者模式:
参考博客:https://blog.csdn.net/u010102390/article/details/80179754

猜你喜欢

转载自www.cnblogs.com/spark9988/p/11521598.html