设计模式
Posted 慧强杨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式相关的知识,希望对你有一定的参考价值。
工厂模式:
有三个角色,分别是工厂、抽象产品、具体产品,通过工厂产生具体产品,返回抽象产品。
当加入新的产品,当增加一个产品不用修改客户端,如果用了返射,工厂也不需要修改,只需修改配置文件,提高代的可扩展、可维护性。工厂与new的比较:
Product user=new ConcreteProduct1();
Product p1=Factory.newInstance();
单例模式:
整个jvm中只有一个实例
1、饿汉式
public class Singleton
private static Singletom me;
private Singleton()
public static Singleton newInstance()
if(me==null)
me=new Singleton();
return me;
2、懒汉式
public class Singleton
private static Singletom me=new Singlton();
private Singleton()
public static Singleton newInstance()
return me;
三个特点:
1、构造子私有
2、有一个私有的静态属性,类型是类本身
3、有一个公有的静态方法
模板模式
三个角色:
父类:有具体方法也有抽象方法,具体方法调用子类实现的抽象方法,
在调用子类实现的抽象方法之前之后,提供服务。
子类:继承父类的具体方法,实现父类的抽象方法。
客户端: 向客户端公开的子类,客户端调用子类继承父类的具体方法,
父类具体方法调用子类实现的抽象方法。
public abstract class Parent
public void service()
System.out.println(“服务1”);
a1();
a2();
a3();
System.out.println(“服务2”);
public abstract void a1();
public abstract void a2();
public abstract void a3();
public class Child extends Parent
public void a1()
public void a2()
public void a3()
public class Client
public static void main(String[] args)
Child child=new Child();
child.service();
四、代理模式
有三个角色,分别是通用接口、真实对象、代理,真实对象、代理
实现的同一个接口,将真实对象作为代理的一个属性,向客户端公开的
代理,客户端调用代理的一方法时,代到调用真实对象的方法,在调用真实
对象的方法之间之后可以做一些服务。
五、什么是aop
aop不是oop,aop是面向方面编程,是对oop的一个补充
oop是纵向的业务处理,aop是横向的服务,如事务、安全、
日志
六、aop实现的原理及名词
aop实现的原理就是代理模式
名词:
拦载器:代理
真实对象:本原
装备:做具体的服务
关切点:那些方法需要什么样的服务
连接点:拦截拦截的是方法还是属性,一般是方法。
一、代理模式?
代理查模式有三个角色,分别是通用接口、代理类、真实对象,
代理类与真实对象实都实现的通用接口,将真实对象作为代理类的
一个属性,向客户端公开的代理类,客户端调用代理类的方法,代理
调用真实对象方法,在调用真实对象的方法之前之后可以做一些服务。
二、什么是aop?aop相关的名词是什么?
aop是面向方面编程,是对oop的补充,oop主要是纵向的业务,aop主要
应用横向的服务,主事务、日志、安全,不可以替代oop,只是补充。
aop相关的名词:
拦截器(代理):向客户端公开通过它找到真实对象。
真实对象:做具体的处理。
装备:代理调用服务类如TransactionManager
关切点:为那些方法提供什么样的服务,如是否需要的事务。
连接点:连接的是方法还是属性,一般是方法。
十、模式的好处是什么?
提高代码的可扩展、可维护
十二、模式的原则?
开闭原则:增加开放(可以替换已有的类),修改关闭(但对已有类不做修改)。
十三、框架设计的原则?
上层依赖于下层,尽量减少下层对上层的依赖,层与层之间通过
接口调用。
十四、工厂模式
有三个角色抽象产品、具体产品、工厂,工厂产生具体产品返回
抽象产品。
如果没有用反射,当增加一个产品时,只需修改工厂,不用修改客户端
半符合开闭原则。
如果用了反射,当增加一个产品时,只需修改配置文件,不用修改客户端及
工厂,完全符合开闭原则。
十五、单例模式:整个jvm中只有一个实例,有三个特点如下:
1、私有的构造子
2、私有的静态属性类型是自己
3、公有的静态方法
1、懒汉式:在真正取时才实例化
private static LazySingleton me;
public static LazySingleton newInstance()
if(me==null)
me =new LazySigleton();
return me;
2、饿汉式:在加载类时直接实例化
private static HungarySingleton me=new HungarySingleton();
十六、模板模式:有一个抽象类定义了具体方法及抽象方法,
具体方法调用抽象方法,为抽象方法提供服务。
子类继承抽象类,实现抽象方法,向客户端公开的
子类,通过抽象类的具体方法调用子类实现的抽象方法,
子类共用父类具体方法提供的服务。
二、装饰模式
有三个角色,分别是通用接口、本原、装饰,本原与装饰都实现了
通用接口,因为将通用接口聚集到了装饰中,所以可以将本原或
装饰聚集到另一个装饰中。通过构造子将一个装饰注入到另一个装饰
中后,可以将多个装饰的功能随意组合,生成更强大的功能。
其实用继承也是可以实现的,但多写很多类。
以上是关于设计模式的主要内容,如果未能解决你的问题,请参考以下文章