设计模式
在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们再思考和摸索,就像是经典的棋谱、不同的棋局。
一、模式分类
创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构性模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、亨元模式
行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
二、单例模式(私有化构造器)
-
采取一定的方法保证在整个的软件系统中,使某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,必须首先将该类的构造器的访问权限设置为private,这样,就不能用 new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象。又因静态方法只能访问类中的静态成员变量,故指向类内部产生的该类对象的变量也必须定义为静态的。
-
饿汉式单例模式
-
① 私有化类的构造器
public calss Bank{ private Bank(){ } }
-
② 内部创建类的对象 ,且该对象也必须是静态的
private static Bank b = new Bank();
-
③ 提供公共的静态的方法,返回类的对象
public static Bank getB(){ return b; }
-
-
懒汉式单例模式
-
①私有化类的构造器
public class Order{ private Order(){ } }
-
② 声明当前类对象,没有初始化
private static Order o = null;
-
③ 声明public、static的返回当前类对象的方法
public static Order getO(){ if(o == null){ o = new Order(); } return o; }
-
-
区分饿汉式和懒汉式
-
饿汉式
好处:线程安全
坏处:对象的加载时间过长
-
懒汉式
好处:延迟对象的创建
坏处:线程不安全
-
三、模板方法(抽象类体现)
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
-
解决的问题:
-
当功能内部一部分实现是确定的,一部分实现是不确定的。这是可以把不确定的部分暴露出去,让子类去实现
-
或者说,在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变的部分可以抽象出来,供不同的子类去实现。这就是一种模板模式。
package test3; public class TimeTest { public static void main(String[] args) { Time t = new Count1(); t.spendTime(); } } abstract class Time{ public void spendTime(){ long start = System.currentTimeMillis(); code(); long end = System.currentTimeMillis(); System.out.println("程序执行的时间为:" + (end - start) + "ms"); } public abstract void code(); } class Count1 extends Time{ @Override public void code() { for (int i = 2; i < 1000; i++) { boolean isFlag = true; for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0){ isFlag = false; break; } } if (isFlag){ System.out.println(i); } } } }
-