設計模式(一)----工廠模式

基本的業務邏輯的編寫並非難事,做爲一個合格的程序員可以編寫出易擴展,可維護,高內聚,低耦合的代碼纔是真正的能力。因此從今天開始會陸陸續續的研究一下設計模式。設計模式並非針對編程語言,而是考察的編程的思想。java


  • 設計模式中最簡單的應該就是工廠模式了,在咱們企業項目中工廠模式和單例模式也是應用最多的模式了。今天咱們就簡單的介紹一下工廠模式。都是我的總結,不喜勿噴!!!

描述

  • 工廠模式就是簡化了對象的構建。正常狀況下咱們在Java中是經過new來構建對象,可是有的對象可能須要設置一些默認值等等的額外操做。這個時候爲了簡化用戶的操做咱們引入了工廠模式的設計思想。工廠模式就是將構建對象的過程封裝在工廠類中,咱們須要具體的工廠類中的對象咱們就能夠經過工廠來獲取了。提升了使用的靈活性。

優勢

  • 經過上面的描述咱們可以輕鬆的發現工廠模式帶來的好處。有了工廠模式咱們構建對象不須要關注對象構建的過程,咱們須要的對象只須要想工廠發出生產對象的指令就能夠了。拋棄構建的複雜過程,增長代碼的閱讀性。

情景再現

  • 工業時代到來以前咱們的生產都是人工的,換句話說就是咱們須要什麼,咱們須要本身動手去完成。而有了工廠以後就擺脫了本身的雙手。好比說你如今是一家服裝廠的老闆,夏天來臨你須要購進一批夏季服裝。相信如今的你不可能本身動手去作衣服,都是經過跟服裝廠聯繫,告訴服裝廠你須要衣服的款式,一段時間後你就得到了這些你指定的衣服。至於這些衣服是如何實現的你根本不用關心。服裝廠在這裏就是咱們工廠模式的工廠。

分類

  • 工廠模式又細分爲三種:簡單工廠模式+工廠方法模式+抽象工廠模式程序員

    • 簡單工廠模式:
      簡單工廠模式是咱們上面的情景再現的狀況,簡單工廠就是說全部的細節都是依靠一個工廠統一完成,這種模式下工廠的壓力特別大。spring

    • 工廠方法模式:
      工廠方法模式在上面情景的基礎上將工廠進行了更改優化,以前工廠是一個工廠生產一年四季的衣服,如今抽象一個工廠類,在有四個工廠是該抽象工廠的具體實現類,這四個工廠具體分別負責生產春夏秋冬衣服。這樣仍然是工廠模式,只不過相對簡單工廠模式已經減輕了工廠的壓力了。編程

    • 抽象工廠模式:
      抽象工廠模式在抽象方法模式的基礎上有進行了強化,抽象方法中是一個具體工廠的實現類負責生產一種類型的衣服,而在抽象工廠模式下一個具體的工廠的實現類能夠生產多個類別的衣服。這樣更加的減輕服裝廠的壓力了。設計模式

代碼實現

這裏咱們就實現簡單工廠模式的代碼,其餘兩種的模式知識在簡單工廠模式的基礎上進行工廠類的強化markdown

服裝抽象類(Clothes)編程語言

package zhangxinhua.JavaDesignDetails.工廠模式.features;

public abstract class Clothes
{
    //袖口的數量
    private int wristband=2;
    //領口的數量
    private int neckline=1;
    //穿衣方式
    public void hold()
    {
        System.out.println("個人穿衣方式是從領口");
    }
    public int getWristband()
    {
        return wristband;
    }
    public void setWristband(int wristband)
    {
        this.wristband = wristband;
    }
    public int getNeckline()
    {
        return neckline;
    }
    public void setNeckline(int neckline)
    {
        this.neckline = neckline;
    }


}

具體服裝類一(AutumnCloth)ide

package zhangxinhua.JavaDesignDetails.工廠模式.special;

import zhangxinhua.JavaDesignDetails.工廠模式.features.Clothes;

public class AutumnCloth extends Clothes {

    @Override
    public void hold()
    {
        System.out.println("我是秋裝,我要倒着穿");
    }

}

具體服裝類二(SpringCloth)學習

package zhangxinhua.JavaDesignDetails.工廠模式.special;

import zhangxinhua.JavaDesignDetails.工廠模式.features.Clothes;

public class SpringCloth extends Clothes {

    @Override
    public void hold()
    {
        System.out.println("我是春裝,我要從領口穿衣");
    }

}

具體服裝類三(SummerCloth)優化

package zhangxinhua.JavaDesignDetails.工廠模式.special;

import zhangxinhua.JavaDesignDetails.工廠模式.features.Clothes;

public class SummerCloth extends Clothes {

    @Override
    public void hold()
    {
        System.out.println("我是夏裝,我要從懷口穿");
    }

}

工廠類(Clothfactory)

package zhangxinhua.JavaDesignDetails.工廠模式.簡單工廠模式.factory;

import zhangxinhua.JavaDesignDetails.工廠模式.features.Clothes;
import zhangxinhua.JavaDesignDetails.工廠模式.special.AutumnCloth;
import zhangxinhua.JavaDesignDetails.工廠模式.special.SpringCloth;
import zhangxinhua.JavaDesignDetails.工廠模式.special.SummerCloth;

public class ClothFactory {
    public static Clothes createClothes(String type) throws Exception
    {
        Clothes clothes=null;
        switch (type)
        {
        case "spring":
            clothes=new SpringCloth();
            break;
        case "summer":
            clothes=new SummerCloth();
            break;
        case "autumn":
            clothes=new AutumnCloth();
            break;
        default:
            throw new Exception("目前不支持你指定的類型");
        }
        return clothes;
    }
}

客戶端調用(client)

package zhangxinhua.JavaDesignDetails.工廠模式.簡單工廠模式.client;

import zhangxinhua.JavaDesignDetails.工廠模式.features.Clothes;
import zhangxinhua.JavaDesignDetails.工廠模式.簡單工廠模式.factory.ClothFactory;

public class client
{
    public static void main(String[] args) throws Exception
    {
        System.out.println("工廠你給我一套春裝");
        Clothes spring = ClothFactory.createClothes("spring");
        spring.hold();
        System.out.println("********************");
        System.out.println("工廠你給我一套秋裝");
        Clothes autum = ClothFactory.createClothes("autumn");
        autum.hold();
        System.out.println("********************");
        System.out.println("工廠你給我一套夏裝");
        Clothes summer = ClothFactory.createClothes("summer");
        summer.hold();
        System.out.println("********************");
    }
}

效果展現

這裏寫圖片描述


總結

  • 設計模式的學習是潛移默化,學習設計模式不要急,成長是須要時間的,今天的努力,未來的一天終會回報。

有須要源碼的,或者有不理解,歡迎掃描左側二維碼,進羣交流討論。

相關文章
相關標籤/搜索