设计模式分为三种类型,共23种: 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式 本文主要讲解的是: 创建型模式:单例模式、建造者模式、工厂模式、 结构型模式:适配器模式、代理模式 行为型模式:模板方法模式、策略模式 对应的GitHub项目地址:https://github.com/kkzhilu/DesignPattern 可以下载进行深入的理解 创建型模式例子 单例模式: 对应的类: SingleTon.java 参考博客: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
来源:https://www./content-1-452251.html
|