设计模式总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
具体工厂类
public class ConcreteCreator extends Creator
{
public
{
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