一、单例模式
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的主要作用是确保一个类只有一个实例存在。比如说序列号生成器、Web页面的计数器等等都可以使用单例模式。对于一个实现了单例模式的类来说,它首先构造方法必须是私有的即private。
单例模式分为饿汉式和懒汉式;
饿汉式:
即这个唯一实例,在类进行加载的时候立刻进行实例化
package interview.pattern;
public class SingLetonPattern{
public static void main(String[] args){
}
}
class Singleton(
private static Singleton singtetorl = new singtetorl();
private Singleton(){}
public static Singleton getInstance(){
return singtetorl;
}
}
懒汉式:
在类加载的时候不进行实例化,在第一次使用的时候在进行实例化
package interview.pattern;
public class SingLetonPattern{
public static void main(String[] args){
}
}
class Singleton(
private static Singleton singtetorl
private Singleton(){}
// 加锁防止出现多次实例化
public synchronized static Singleton getInstance(){
if(singtetorl == null)
singtetorl = new Singleton();
return singtetorl;
}
}
二、简单工厂模式
简单工厂模式(Simple Factory Patterm):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例能延迟到其子类。
适用性:
1.当一个类不知道它所必须创建的对象的类的时候。
2.当一个类希望由它的子类来指定它所创建的对象的时候。
3.当将创建对象的职责委托给多个帮助子类中的某一个,并且希望将那一个帮助子类是代理者这一信息局部化的时候。
- Product :定义工厂方法所创建的对象的接口。
public interface Work {
void doWork();
}
2. ConcreteProduct :实现 Product 接口。
public class StudentWork implements Work {
public void doWork() {
System.out.println("学生*作业!");
}
}
public class TeacherWork implements Work {
public void doWork() {
System.out.println("老师审批作业!");
}
}
3. Creator 声明工厂方法,该方法返回一个 Product 类型的对象。 Creator 也可以定义一个工厂方法的缺省实现,它返回一个缺省的 ConcreteProduct 对象。 可以调用工厂方法以创建一个 Product 对象。
public interface IWorkFactory {
Work getork();
}
4. ConcreteCreator 重定义工厂方法以返回一个 ConcreteProduct 实例。
pulic class StudentWorkFactory implements IWorkFactory {
public Work getWork() {
return new StudentWork();
}
}
public class TeacherWorkFactory implements IWorkFactory {
public Work getWork() {
return new TeacherWork();
}
}
Test
public class Test {
public static void min(String[] args){
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.g*tWork().doWork();
}
}
result
学生做作业!
老师审批作业!
三、抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们接口而不是实现时。
参与者
1.AbstractFactory
声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory
实现创建具体产品对象的操作。
3.AbstractProduct
为一类产品对象声明一个接口。
4.ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。
实现 abstractProduct 接口。
5.Client
仅使用由 AbstractFactory 和 AbstractProduct 类声明的接口。