標籤:構造 his 常用 測試 detail 動態 易拓 java反射 color
http://blog.csdn.net/haoxingfeng/article/details/9191619
1>代理模式
http://www.cnblogs.com/chinajava/p/5880870.html
代理模式分靜態代理和動態代理
靜態代理:(需要一個介面,一個委託類實現介面,一個代理類實現介面,) 代理模式就是提供一個代理對象,其可以實現委託類的部分功能,而且也可以拓展自己的功能
例如(委託類)售票廳可以售票、改簽、退票;(代理類)黃牛售票只可以售票,要辦理改簽或者退票的業務必須去售票廳
//介面package com.wyx.proxyTest;public interface ISubject { public void request();}//委託類package com.wyx.proxyTest;public class SubjectImpl implements ISubject { @Override public void request() { System.out.println("this is real subject"); } public void otherFun(){ } } //代理類package com.wyx.proxyTest;/* * 這個是代理類,它只有SubjectImpl中的部分功能 */public class SubjectProxy implements ISubject{ private ISubject sub = null; public SubjectProxy(ISubject sub){ this.sub = sub; } @Override public void request() { System.out.println("This is Proxy"); sub.request(); }} //代理類測試package com.wyx.proxyTest;public class MainTest { public static void main(String[] args){ SubjectImpl sub = new SubjectImpl(); SubjectProxy proxy = new SubjectProxy(sub); proxy.request(); }}
動態代理:
2>裝飾模式
3>策略模式(這個模式是行為的抽象,蔣其他幾個類有相似的方法,用通用的抽象的方法提取出來,更容易拓展)
4>單例模式(使得記憶體中只存在一個這樣的對象,有餓漢式、飽漢式)
public class SingleMain{
//主方法
public static void main(String[] args){
}
}
//餓漢式
class SingletonDome1{
//私人的對象
private static final SingletonDome1 sgd1 = new SingletonDome1();
///私人的構造方法
private SingletonDome1(){}
//
public static SingletonDome1 getSgd1(){
return sgd1;
}
}
//飽漢式
class SingletonDome2{
//私人的對象
private static SingletonDome2 sgd2 = new SingletonDme2();
//私人的構造方法
private SingletonDome2(){}
//
public static SingletonDome2 getSgd2(){
if(sgd2 == null){
sgd2 = new SingletonDome2();
}
return sgd2;
}
}
5>原廠模式(是執行個體化對象的方法模式,即:用Factory 方法代替New操作的一種模式,例:以下是個簡單的例子)
/*
*靜態原廠模式
*/
//介面
public interface Alphabet{
public void alphabetFun(Object... params);}
//介面的實現A類
public class A implements Alphabet{
@Override
public void alphabetFun(Object... params){
System.out.println(params[0]+" "+"This is A");
}
}
//介面的實現B類
public class B implements Alphabet{
@Override
public void alphabetFun(Object... params){
System.out.println(params[0]+" "+"This is A");
}
}
//工廠類
public class FactoryCls{
public static Alphabet factoryFun(String abc){
Alphabet tempObj;
//利用了java反射的機制
Class cls = null;
try{
cls = Class.forName("類路徑");
}catch(Expection e){
e.printStackTrace();
}
/*
if(abc=="A"){
tempObj = new A();
}else if(abc=="B"){
tempObj = new B();
}
*/
return tempObj;
}
}
常用的設計模式及java代碼描述