首页 > 代码库 > 设计模式小计——23种设计模式1
设计模式小计——23种设计模式1
单例模式Singleton Pattern 确保类只有一个实例,而且自行实例化并向整个系统提供这个实例 public class Singleton{ private static final Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getSingleton(){ return singleton; } } 节省内存开支,减少性能开销,应用启动产生单例对象,永久驻留内存 单例模式与单一职责原则冲突,把“需要单例”功能和业务逻辑融合在一个类 私有构造函数的对象仍然可以被复制,单例模式类不应该实现Cloneable接口 单例模式拓展,多个实例的单例模式 public class MoreSingleton{ private static final int maxNum=2; private static ArrayList<MoreSingleton> singletonList = new ArrayList<MoreSingleton>(); ArrayList<MoreSingleton>(String value){ valueList.add(value); } private static ArrayList<String> valueList = new ArrayList<String>(); //产生所有对象 static{ for(int i=0;i<maxNum;i++){ singletonList.add(new MoreSingleton(value)); } } private MoreSingleton(){} public static MoreSingleton getMoreSingleton(int index){ return singletonList.get(index); } } 工厂方法模式Factory Pattern 定义一个用于创建对象的接口,让子类决定实例化哪一个类 //定义抽象产品类 public abstract class Product{ public abstract void method(); } //定义具体产品类 public class ConProduct extends Product{ public void method(){} } //定义抽象工厂类 public abstract class Factory{ public abstract <T extends Product> T createProduct(Class<T> c); //泛型,所有继承Product的类 } //具体工厂类 public class ConFactory extends Factory{ public <T extends Product> T createProduct(Class<T> c){//工厂函数 Product product=null; try{ product=(Product)Class.forName(c.getName()).newInstance();//内省 }catch(Exception e){//异常处理} return (T)product; } } 工厂方法模式封装良好,结构清晰,易于扩展。是典型的解耦框架,高层模块只需要知道产品的抽象类,符合迪米特法则和依赖倒置原则,只依赖产品类的抽象,也符合里氏替换原则。 工厂方法模式扩展 简单工厂模式Simple Factory Pattern,去除抽象工厂类,将工厂函数设为static。 多工厂模式,每个具体产品对应一个共产类,类职责清晰,结构简单,但增加了扩展难度。 替代单例模式 public class Singleton{ private Singleton(); } public class SingletonFactory{ private static Singleton singleton; static{ try{ //通过反射方式创建单例类 Class cl = Class.forName(Singleton.class.getName()); //获得无参构造 Constructor con = c1.getDeclaredConstructor(); //设置无参构造可访问 con.setAccessible(true); //产生实例 singleton = (Singleton)con.newInstance(); }catch(Exception e){//异常处理} } public static Singleton getSingleton(){ return singleton; } } 延迟初始化,对象创建后在类内保存引用,在下次创建对象时查找类内是否存在,有则直接取出返回,如在ProductFactory类内定义private static final Map<String,Product> prMap = new HashMap(); 抽象工厂模式Abstract Factory Pattern 为一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 抽象工厂模式是工厂方法模式的升级版本,当有多个业务品种,业务分类时,通过抽象工厂模式解决。 //抽象产品类A public abstract class AbstractProductA{ public abstract void method(); } //A系列产品A1实现类 public class ProductA1 extends AbstractProductA{ public void method(){} } //A系列产品A2实现类 public class ProductA2 extends AbstractProductA{ public void method(){} } //抽象产品类B public abstract class AbstractProductB{ public abstract void method(); } //B系列产品B1实现类 public class ProductB1 extends AbstractProductB{ public void method(){} } //B系列产品B2实现类 public class ProductB2 extends AbstractProductB{ public void method(){} } //抽象工厂类 public abstract class AbstractFactory{ public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); } //产品1工厂类 public class Factory1 extends AbstractFactory{ public AbstractProductA createProductA(){ return new ProductA1(); } public AbstractProductB createProductB(){ return new ProductB1(); } } //产品2工厂类 public class Factory2 extends AbstractFactory{ public AbstractProductA createProductA(){ return new ProductA2(); } public AbstractProductB createProductB(){ return new ProductB2(); } } 抽象工厂模式产品族扩展复杂
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。