代理模式,簡單(靜態)工廠模式,單例模式,模板方法模式個人理解
簡言:
java中總共有23種設計模式,每個模式的出現都是為了解決某一方面的問題,所以這23種設計模式有他們各自適用的地方(廢話有點多),而設計模式的產生主要是為了降低類與類之間的耦合度。下面我們就簡單的瞭解一下幾種設計模式及使用的地方。
1.單例模式:
我們都知道單例模式分為懶漢式、餓漢式以及登記式三種。
程式碼如下(以懶漢式):
public class 單例模式 {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub a a1=a.getinstence(); a1.gg(); }
}
class a{
private static a a;
private a(){
}
public static a getinstence(){
if(a==null){
a=new a();
System.out.println("haha");
}
return a;
}
public void gg(){
System.out.println("hahsdsda");
}
}
特點:
如上程式碼所式可知:a類的構造方法為私有的(是不是有點奇怪啊,平時我們的構造方法為public的),這就是單例模式的特點,即只能存在一個物件。
單例物件是通過自己來建立物件的。
單例類必須給所有其他物件提供這一例項。
在什麼地方可以考慮使用:
1.當一個類沒有屬性。
2.該類作為工具類使用非常頻繁。
2.工廠模式:
工廠模式分為三種:簡單工廠模式、工廠方法模式、抽象工廠模式。而本文主要針對簡單工廠模式。
簡單工廠模式程式碼如下:
package 模式;
public class 工廠模式 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
work w=factor.getwork("tv");
w.working();
}}
class factor {
public static work getwork(String name){
if(name.equals(“tv”)){return new tv();}
else if(name.equals(“phone”)){return new phone();}
else{
return null;}
}
}
interface work{
void working();
}
class tv implements work{
@Override
public void working() {
// TODO Auto-generated method stub
System.out.println("tvok");
}
}
class phone implements work{
@Override
public void working() {
// TODO Auto-generated method stub
System.out.println("shoujiok");
}
}
該模式的目的是為了加強程式碼的健壯性。減少類與類之間的耦合度。
使用的場景:
1動態實現:好多需要實現同一個介面的物件,
2.如上面的程式碼所示一樣,如果我不使用工廠模式的話,就必須想使用某個類中的方法就必須new一個方法,假如某天這個類消失了,或則改名字了,那麼new物件的方法也就沒用了,還會報錯,所以就使用該模式,該模式通過傳遞某些值來new一個物件,如果該類不存在,或者是其他原因也不會導致錯誤的發生,總的來說就是降低了類與類之間的耦合度。
3.代理模式:
簡單的比喻就是一個人代表另一個人採取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個物件,而代理物件可以在客戶端和目標物件之前起到中介的作用。
程式碼如下:
public class 代理模式 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
buy b=new people();
daili d=new daili(b);
d.shopp();
}
}
//個人購買
class people implements buy{
@Override
public void shopp() {
// TODO Auto-generated method stub
System.out.println(“buysomething”);
}
}
interface buy{
void shopp();
}
//代理
class daili implements buy{
private buy b;
public daili( buy b){
this.b=b;
}
@Override
public void shopp() {
// TODO Auto-generated method stub
b.shopp();
System.out.println(“thank”);
}
}
4.模板方法模式:
模板方法模式是所有模式中最為常見的幾個模式之一,他是基於繼承的程式碼複用的基本技術。
程式碼:public class 模板方法設計模式 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
aa a1=new c();
a1.finall();
}
}
abstract class aa{
abstract boolean say();
void finall(){
if(say()){
System.out.println(“gg”);
}
else{
System.out.println(“hh”);
}
}
}
class b extends aa{
@Override
boolean say() {
// TODO Auto-generated method stub
return true;
}
}
class c extends aa{
@Override
boolean say() {
// TODO Auto-generated method stub
return false;
}
}
主要是用了多型和抽象類的方法實現,主要是為了一次性實現一個演算法的不變的部分,並將可變的行為留給子類來實現。