工厂模式与单实例模式
程序员文章站
2022-05-23 14:56:18
...
首先想说的是设计模式共有23种,分三大类:
1、创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
2、结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
3、行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
具体介绍可参见:http://www.360doc.com/content/13/0329/09/10504424_274614664.shtml
本文主要讲解工厂模式和单实例模式:
工厂模式:
工厂模式,顾名思义,就是类似现实中的工厂。根据用户的需求(即传入的参数)决定实例化一个对应的类,而不是由用户构建。
实现代码:
//两种不同型号的电脑
public class ComputerA implements ICOm{
}
public class ComputerB implements ICOm{
}
//接口
public interface ICOm {
}
//电脑生产工厂
public class ComputerCreator {
//根据用户的需求生产对应的产品
public static ICOm creat(int type){
if(type == 1){
return new ComputerA();
}
else if(type == 2){
return new ComputerB();
}
}
public static void main(String[] args) {
ICOm comA = ComputerCreator.creat(1);
ICOm comB = ComputerCreator.creat(2);
}
}
工厂模式的优点是为系统结构提供了灵活的动态扩展机制,方便维护,且求该市无需对客户端改动。缺点是修改时工厂类和产品类都要修改。
单实例模式:
就是有且仅有一个实例化的对象,构造方法私有化,但是提供了一个可以访问内部全局的引用。
实现代码:
public class Technique {
private Technique(){};
private static Technique tec = null;
public Technique gettec(){
if(tec == null){
tec = new Technique();
}
return tec;
}
}
单实例模式的优点是由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。缺点是破坏了类的封装性。
单实例模式要额外考虑线程安全性:
public class Technique {
private Technique(){};
private static Technique tec = null;
if (tec == null) {
//保证线程安全性
synchronized (tec) {
if (tec == null) {
tec = new Technique();
}
}
}
}