设计模式总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单例模式

定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

通用类图:

通过Singleton.getSingleton来访问

单例模式通用代码:

Public class Singleton

{

Private static final Singleton singleton=new Singleton();

//限制多个对象产生

Private Singleton(){}

//通过该方式获得实例

Public static Singleton getSingleton()

{

Return singleton;

}

//处理事件

Public static void dosomething()

{}

}

备注:Singleton类成为单例类,通过使用private的构造函数确保在一个应用中只有一个实例并自行实例化。

优点:减少了内存开支;减少了系统内存损耗;避免对资源的多重占用;可设置全局访问点,优化和共享资源访问。

缺点:没有接口,扩展比较困难;不利于程序的测试;与单一职责原则有冲突。

扩展:懒汉式单例:在getSingleton方法前添加synchronized关键字,也可以在getSingleton方法内增加synchronized来实现

简单工厂模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

通用类图:

通用代码:

抽象产品类:

public abstract class Product{

//产品类的公共方法

public void method1(){

//业务逻辑处理

}

//抽象方法

public abstract void method2(); }

具体产品类

public class ConcreteProduct1 extends Product

{

public void method2()

{

//业务逻辑处理

}

}

public class ConcreteProduct2 extends Product

{

public void method2()

{

//业务逻辑处理

}

}

抽象工厂类

public abstract class Creator

{

//创建一个产品,其输入参数类型可以自行设置

public abstract T createProduct(Class c); }

具体工厂类

public class ConcreteCreator extends Creator

{

public T createProduct(Class c)

{

Product product=null;

try

{

product

=(Product)Class.forName(c.getName()). newInstance();

}

catch (Exception e)

{

//异常处理

}

return (T)product;

}

}

场景类

public class Client

{

public static void main(String[] args)

{

Creator creator=new ConcreteCreator();

Product

product=creator.createProduct(Concret eProduct1.class);

/*

业务处理

*/

}

}

优点:良好的封装性,代码结构清晰;具有良好的扩展性;屏蔽产品类,调用更方便;典型解耦框架,符合迪米特法则、依赖倒置原则、里氏替换原则。

抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

通用类图:

源代码清单:

抽象产品类

public abstract class AbstractProductA {

//每个产品拥有的方法

public void shareMethod()

{}

//每个产品相同的方法,不同的实现

public abstract void dosomething();

}

产品A1的实现类

public class ProductA1 extends AbstractProductA

{

public void dosomething()

{

System.out.println("

产品A1的实现方法");

}

}

产品A2的实现类

public class ProductA2 extends AbstractProductA

{

public void dosomething()

{

System.out.println("

产品A2的实现方法");

}

}

抽象工厂类

public abstract class AbstarctCreator

{

//创建A产品家族

public abstract AbstractProductA createProductA();

//创建B产品家族

public abstract AbstractProductB createProductB();

}

产品等级1的实现类

public class Creator1 extends AbstractCreator

{

//只生产产品等级为1的A 产品

public AbstractProductA createProductA()

{

return new ProductA1();

}

//只生产等级为1的B产品

public AbstractProductB createProductB()

{

return new ProductB1();

}

}

产品等级2的实现类

public abstract Creator2 extends AbstractCreator

{

//只生产等级为2的A产品

public AbstractProductA createProductA()

{

return new productA2();

}

//只生产等级为2的B产品

public AbstractProductB extends AbstrctCreator

{

return new ProductB2();

}

}

场景类

public class Client

{

public static void

相关文档
最新文档