设计模式小计——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();
}
}
抽象工厂模式产品族扩展复杂

设计模式小计——23种设计模式1,布布扣,bubuko.com

时间: 2024-10-05 23:36:54

设计模式小计——23种设计模式1的相关文章

设计模式小计——23种设计模式3

责任链模式Chain of Responsibility 使多个对象都有机会处理请求,从而避免请求的发送者和接受者间的耦合关系,并沿着这条链传递请求,直到有对象处理它为止 责任链模式关键是建立链接关系,在链中决定谁来处理请求 //抽象处理者 public abstract class Handle{ private Handle nextHandle;//链的下一个节点 public final Response handleMessage(Request request){ Response

设计模式小计——23种设计模式2

模板方法模式Template Method Pattern 定义一个操作的算法的框架,是的子类可以不改变算法结构即可重定义该算法一些特定步骤 public abstract class AbstractClass{//抽象模板类 protected abstract void method1();//算法步骤1 protected abstract void method2();//算法步骤2 public void templateMethod(){//模板方法,定义算法结构 this.met

JAVA设计模式总结之23种设计模式

一.什么是设计模式                                                                                                                                        设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于

23种设计模式综合实例应用目录

突然发现学所到的知识并不能满足日常工作的需要,便想起了设计模式,在此以北风网的Java设计模式全面解析(23种设计模式综合实例应用)课程为蓝本,以文本的形式记录各种设计模式的介绍.使用方法.优缺点.使用场景等. 观看地址:http://www.ed2000.com/ShowFile.asp?FileID=153245 1.简单工厂模式 2.工厂方法模式

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式【转】

23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) 7. Bridge(桥接) 8. Composite(组合) 9. Decorator(装饰) 10. Facade(外观) 11. Flyweight(享元) 12. Proxy(代理) 行为型 13.

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式全解析

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 总原则:开闭原则(Open C

c#中的23种设计模式

C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核心是一个抽象工厂类,各种具体工厂类通过抽象工厂类将工厂方法继承下来.如此使得客户可以只关心抽象产品和抽象工厂,完全不用理会返回的是哪一种具体产品,也不用关系它是如何被具体工厂创建的. 抽象工厂模式(Abstract Factory) 抽象工厂模式的主要优点是隔离了具体类的生成,使得客户不需要知道什么