国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式之7大設(shè)計(jì)原則-Java版

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式之7大設(shè)計(jì)原則-Java版。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

軟件設(shè)計(jì)模式是前輩們代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),可以反復(fù)使用。設(shè)計(jì)模式共分為3大類,創(chuàng)建者模式(5種)、結(jié)構(gòu)型模式(7種)、行為型模式(11種),一共23種設(shè)計(jì)模式,軟件設(shè)計(jì)一般需要滿足7大基本原則。下面通過(guò)5章的學(xué)習(xí)一起來(lái)看看設(shè)計(jì)模式的魅力吧。

目錄

1.1、設(shè)計(jì)模式概述

1.2、設(shè)計(jì)模式的分類

1.3、UML類圖

1.4、設(shè)計(jì)原則

1.4.1 開(kāi)閉原則

1.4.2、里式代換原則

1.4.3、依賴倒轉(zhuǎn)原則

1.4.4、接口隔離原則

1.4.5、迪米特法則

1.4.6、合成復(fù)用原則

1.4.7、單一職責(zé)原則


1.1、設(shè)計(jì)模式概述

軟件設(shè)計(jì)模式是前輩們代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),本質(zhì)上是對(duì)面向?qū)ο笤O(shè)計(jì)原則的實(shí)際應(yīng)用,是對(duì)類的封裝、繼承、多態(tài)以及類的關(guān)聯(lián)關(guān)系與組合關(guān)系的充分理解。

使用設(shè)計(jì)模式的代碼可重用性與可維護(hù)性高、可讀性強(qiáng)、可以減少軟件開(kāi)發(fā)周期,提升開(kāi)發(fā)效率。

1.2、設(shè)計(jì)模式的分類

創(chuàng)建型模式(5種):本質(zhì)上就是將對(duì)象的創(chuàng)建與使用分離,就是描述怎樣去創(chuàng)建對(duì)象。

包括:?jiǎn)卫⒃?、工廠方法、抽象工廠、建造者模式

結(jié)構(gòu)型模式(7種):本質(zhì)上是將類或者對(duì)象按照某種布局組成更大的結(jié)構(gòu)。

包括:代理、適配器、橋接、裝飾、外觀、享元、組合模式

行為模式(11種):本質(zhì)是描述類與對(duì)象協(xié)助完成單個(gè)對(duì)象無(wú)法完成的任務(wù),以及怎么分配職責(zé)。

包括:模板方法、策略、命令、責(zé)任鏈、狀態(tài)、觀察者、中介者模式、迭代器、訪問(wèn)者、備忘錄、解釋器。

1.3、UML類圖

類圖是面向?qū)ο蠼5闹饕M成部門(mén),類圖顯示了模型的內(nèi)部結(jié)構(gòu),主要包括:模型中存在的類、類的屬性以及類與類之間的關(guān)系等。

1.4、設(shè)計(jì)原則

設(shè)計(jì)模式的7大原則,具體如下:

1.開(kāi)閉原則:軟件實(shí)體 (類、模塊、函數(shù)等等) 應(yīng)該是可以被擴(kuò)展的,但是不可被修改。

2.里式代換原則:繼承的時(shí)候盡量不要重寫(xiě)父類的方法,如果重寫(xiě)要保證不破壞原方法的功能。

3.依賴倒轉(zhuǎn)原則:抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象,依賴接口,面向接口編程。

4.接口隔離原則:客戶端不應(yīng)該依賴它不需要的接口,一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。

5.迪米特法則:最少知道原則,它表示一個(gè)對(duì)象應(yīng)該對(duì)其它對(duì)象保持最少的了解。通俗來(lái)說(shuō)就是,只與直接的朋友通信。

6.合成復(fù)用原則:通過(guò)組合或者聚合的方式替代繼承,增強(qiáng)封裝性與提升復(fù)用的靈活性。

7.單一職責(zé):表示一個(gè)模塊的組成元素之間的功能相關(guān)性,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)。

1.4.1 開(kāi)閉原則

1.開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。擴(kuò)展源程序的時(shí)候,不要修改原有代碼,通過(guò)使用接口與抽象類實(shí)現(xiàn)。

通過(guò)定義一個(gè)抽象類,抽象類中定義抽象方法,通過(guò)多個(gè)子類繼承抽象類并重寫(xiě)重寫(xiě)抽象方法,同時(shí)設(shè)置一個(gè)中間類用于注入抽象類并調(diào)用抽象方法,這樣在客戶端測(cè)試類中就可以實(shí)例化中間類,并注入抽象類的子類,即實(shí)現(xiàn)了擴(kuò)展類方法,也沒(méi)更改代碼本身。

1.定義一個(gè)抽象類,如下:

/**
 * @ClassName AbstractSkin
 * @description: 抽象皮膚類
 * @author nuist__NJUPT
 * @date 2024年01月18日
 * @version: 1.0
 */
public abstract class AbstractSkin {
    // 顯示方法
    public abstract void display() ;


}

2.定義兩個(gè)子類,繼承抽象類并實(shí)現(xiàn)抽象方法display


/**
 * @ClassName DefaultSkin
 * @description: 默認(rèn)皮膚
 * @author nuist__NJUPT
 * @date 2024年01月18日
 * @version: 1.0
 */
public class DefaultSkin extends AbstractSkin{

    @Override
    public void display() {
        System.out.println("默認(rèn)皮膚");
    }

}


/**
 * @author nuist__NJUPT
 * @ClassName NewSkin
 * @description: 新皮膚
 * @date 2024年01月18日
 * @version: 1.0
 */
public class NewSkin extends AbstractSkin {

    @Override
    public void display() {
        System.out.println("新皮膚");
    }
}

3.定義一個(gè)中間類,在中間類中注入抽象類,并調(diào)用抽象方法。

/**
 * @author nuist__NJUPT
 * @ClassName SogouInput
 * @description: 搜狗輸入法
 * @date 2024年01月18日
 * @version: 1.0
 */
public class SogouInput {

    private AbstractSkin abstractSkin ;

    public void setAbstractSkin(AbstractSkin abstractSkin) {
        this.abstractSkin = abstractSkin;
    }

    public void display(){
        abstractSkin.display();
    }
}

4.定義一個(gè)客戶端測(cè)試類,在測(cè)試類中實(shí)例化中間類,并注入實(shí)例化子類,即可調(diào)用子類方法

/**
 * @author nuist__NJUPT
 * @ClassName Client
 * @description: TODO
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Client {
    public static void main(String[] args) {
        //1.創(chuàng)建搜狗輸入法對(duì)象
        SogouInput sogouInput = new SogouInput() ;
        //2.創(chuàng)建皮膚對(duì)象并將皮膚設(shè)置到輸入法
        sogouInput.setAbstractSkin(new DefaultSkin());
        // sogouInput.setAbstractSkin(new NewSkin());
        //4.顯示皮膚
        sogouInput.display();
    }

}
1.4.2、里式代換原則

里式代換原則:子類可以擴(kuò)展父類的功能,但是不允許更改父類的內(nèi)容。

子類繼承父類得時(shí)候,可以新增方法,但是盡量不要重寫(xiě)父類當(dāng)中得方法

這里通過(guò)定義接口,在接口中定義方法,通過(guò)實(shí)現(xiàn)類的方式實(shí)現(xiàn)接口中方法的功能。

1.定義四邊形接口,并定義獲取長(zhǎng)于寬的方法。


/**
 * @author nuist__NJUPT
 * @InterfaceName Quadrilateral
 * @description: 四邊形接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface Quadrilateral {

    double getLength() ;

    double getWidth() ;

}

2.定義四邊形接口的兩個(gè)實(shí)現(xiàn)類,正方法與長(zhǎng)方形。



/**
 * @author nuist__NJUPT
 * @ClassName Rectangle
 * @description: 長(zhǎng)方形實(shí)現(xiàn)類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Rectangle implements Quadrilateral {

    private double length ;
    private  double width ;

    public void setLength(double length) {
        this.length = length;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    @Override
    public double getLength() {
        return length;
    }

    @Override
    public double getWidth() {
        return width;
    }
}


/**
 * @author nuist__NJUPT
 * @ClassName Square
 * @description: 正方形實(shí)現(xiàn)類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Square implements Quadrilateral {

    private double side ;

    public double getSide() {
        return side;
    }

    public void setSide(double side) {
        this.side = side;
    }

    @Override
    public double getLength() {
        return side;
    }

    @Override
    public double getWidth() {
        return side;
    }
}

3.定義測(cè)試類,測(cè)試通過(guò)實(shí)現(xiàn)類進(jìn)行擴(kuò)充長(zhǎng)寬并打印。

import com.company.p1.demo2.Rectangle;

/**
 * @author nuist__NJUPT
 * @ClassName RectangleDemo
 * @description: 測(cè)試類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class RectangleDemo {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle() ;
        rectangle.setLength(20);
        rectangle.setWidth(10);
        resize(rectangle);
        print(rectangle);
    }
    /**
     * 擴(kuò)寬方法
     * @param rectangle
     */
    public static void resize(com.company.p1.demo2.Rectangle rectangle){
        // 寬比長(zhǎng)小則擴(kuò)充
        while(rectangle.getLength() >= rectangle.getWidth()){
            rectangle.setWidth(rectangle.getWidth() + 1);
        }
    }

    /**
     * 打印長(zhǎng)與寬
     * @param rectangle
     */
    public static void print(Rectangle rectangle){
        System.out.println("長(zhǎng)方形的長(zhǎng)為:" + rectangle.getLength());
        System.out.println("長(zhǎng)方形的寬為:" + rectangle.getWidth());
    }

}
1.4.3、依賴倒轉(zhuǎn)原則

依賴倒轉(zhuǎn)原則:模塊應(yīng)該依賴于抽象,就是面向抽象編程,而不是對(duì)實(shí)現(xiàn)進(jìn)行編程,這樣可以降低客戶與實(shí)現(xiàn)之間的耦合。具體說(shuō)就是依賴接口,而不是依賴具體的實(shí)現(xiàn)類。

首先定義三個(gè)接口,硬盤(pán),內(nèi)存,cpu的如下:


/**
 * @author nuist__NJUPT
 * @InterfaceName HardDisk
 * @description: 硬盤(pán)接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface HardDisk {

    // 存儲(chǔ)數(shù)據(jù)
    public void save(String data) ;

    // 獲取數(shù)據(jù)
    public String get() ;
}
/**
 * @author nuist__NJUPT
 * @InterfaceName Cpu
 * @description: CPU接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface Cpu {

    public void run() ;

}

/**
 * @author nuist__NJUPT
 * @InterfaceName Memory
 * @description: 內(nèi)存條接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface Memory {
    //存儲(chǔ)數(shù)據(jù)的接口
    public void save() ;

}

然后分別定義三個(gè)接口的實(shí)現(xiàn)類,如下:


/**
 * @author nuist__NJUPT
 * @ClassName XiJieHardDisk
 * @description: 硬盤(pán)實(shí)現(xiàn)類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class XiJieHardDisk implements HardDisk {

    @Override
    public void save(String data) {
        System.out.println("使用希捷硬盤(pán)存儲(chǔ)數(shù)據(jù)");
    }

    @Override
    public String get() {
        return "從硬盤(pán)中獲取的數(shù)據(jù)" ;
    }
}
/**
 * @author nuist__NJUPT
 * @ClassName IntelCpu
 * @description: Intel的CPU
 * @date 2024年01月18日
 * @version: 1.0
 */
public class IntelCpu implements Cpu {

    @Override
    public void run() {
        System.out.println("運(yùn)行Intel的cpu");
    }
}
/**
 * @author nuist__NJUPT
 * @ClassName KingstonMemory
 * @description: TODO
 * @date 2024年01月18日
 * @version: 1.0
 */
public class KingstonMemory implements Memory {

    @Override
    public void save() {
        System.out.println("使用金士頓內(nèi)存條");
    }
}

然后定義一個(gè)中間類,用于依賴這些接口,而不是這些實(shí)現(xiàn)類。

/**
 * @author nuist__NJUPT
 * @ClassName Computer
 * @description: 計(jì)算機(jī)類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Computer {
    /**
     * 依賴的是抽象接口,而不是具體的實(shí)現(xiàn)類,這樣后面增加新的實(shí)現(xiàn)類不需要改動(dòng)Computer
     * 只需要增加實(shí)現(xiàn)類,并且在測(cè)試類中進(jìn)行實(shí)例化就可以了
     */
    private HardDisk hardDisk ;
    private Cpu cpu ;
    private Memory memory ;

    public HardDisk getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(HardDisk hardDisk) {
        this.hardDisk = hardDisk;
    }

    public Cpu getCpu() {
        return cpu;
    }

    public void setCpu(Cpu cpu) {
        this.cpu = cpu;
    }

    public Memory getMemory() {
        return memory;
    }

    public void setMemory(Memory memory) {
        this.memory = memory;
    }

    /**
     * 運(yùn)行計(jì)算機(jī)的方法
     */
    public void run(){
        System.out.println("運(yùn)行計(jì)算機(jī)");
        System.out.println("從硬盤(pán)上獲取的數(shù)據(jù):" + hardDisk.get());
        cpu.run();
        memory.save();
    }
}

最后定義測(cè)試類,在測(cè)試類中實(shí)例化中間類與實(shí)現(xiàn)類,并調(diào)用實(shí)現(xiàn)類的方法,在測(cè)試類中依賴具體,而不是在中間類,中間類依賴的是抽象的接口。這樣在就可以避免中間層的代碼修改,只需要增加實(shí)現(xiàn)類然后在測(cè)試類,也就是客戶端修改代碼即可。

/**
 * @author nuist__NJUPT
 * @ClassName ComputerDemo
 * @description: 測(cè)試類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class ComputerDemo {
    public static void main(String[] args) {


        HardDisk hardDisk = new XiJieHardDisk() ;
        Cpu cpu = new IntelCpu() ;
        Memory memory = new KingstonMemory() ;

        Computer computer = new Computer() ;
        computer.setCpu(cpu);
        computer.setMemory(memory);
        computer.setHardDisk(hardDisk);

        computer.run();


    }

}
1.4.4、接口隔離原則

接口隔離原則:一個(gè)類對(duì)另外一個(gè)類的依賴應(yīng)該建立在最小的接口上,也就是定義接口的功能最小化,然后通過(guò)實(shí)現(xiàn)類的方式重寫(xiě)接口中的抽象方法即可,這樣可以避免客戶端依賴的方法是它并不使用的。

1.定義三個(gè)相互隔離的最小化接口,而不是定義一個(gè)接口包含三個(gè)方法,避免實(shí)現(xiàn)類依賴不使用的方法。


/**
 * @author nuist__NJUPT
 * @InterfaceName AntiTheft
 * @description: 防盜接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface AntiTheft {

    void antiTheft() ;

}
/**
 * @author nuist__NJUPT
 * @InterfaceName Fireproof
 * @description: 防火接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface Fireproof {

    void fireproof() ;
}
/**
 * @author nuist__NJUPT
 * @InterfaceName Waterproof
 * @description: 防水接口
 * @date 2024年01月18日
 * @version: 1.0
 */
public interface Waterproof {
    void waterproof() ;
}

2.定義多個(gè)實(shí)現(xiàn)類,分別實(shí)現(xiàn)接口并重寫(xiě)接口中的抽象方法,需要用到接口方法的,才去實(shí)現(xiàn)接口。

/**
 * @author nuist__NJUPT
 * @ClassName SafeDoor
 * @description: TODO
 * @date 2024年01月18日
 * @version: 1.0
 */
public class SafeDoor implements AntiTheft, Fireproof, Waterproof {

    @Override
    public void antiTheft() {
        System.out.println("防盜");
    }

    @Override
    public void fireproof() {
        System.out.println("防火");
    }

    @Override
    public void waterproof() {
        System.out.println("防水");
    }
}
/**
 * @author nuist__NJUPT
 * @ClassName SafeDoor2
 * @description: TODO
 * @date 2024年01月18日
 * @version: 1.0
 */
public class SafeDoor2 implements AntiTheft, Fireproof{

    @Override
    public void antiTheft() {
        System.out.println("防盜");
    }

    @Override
    public void fireproof() {
        System.out.println("防火");
    }
}

3.在測(cè)試類中實(shí)例化實(shí)現(xiàn)類,并調(diào)用相應(yīng)的實(shí)現(xiàn)方法。


/**
 * @author nuist__NJUPT
 * @ClassName Client
 * @description:測(cè)試類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Client {
    public static void main(String[] args) {
        // 實(shí)例化對(duì)象
        SafeDoor safeDoor = new SafeDoor() ;
        safeDoor.antiTheft();
        safeDoor.fireproof();
        safeDoor.waterproof();

        System.out.println("-----------------------------");

        SafeDoor2 safeDoor2 = new SafeDoor2() ;
        safeDoor2.antiTheft();
        safeDoor2.fireproof();
    }
}
1.4.5、迪米特法則

迪米特法則:最少只知識(shí)原則,也就是說(shuō)如果兩個(gè)實(shí)體無(wú)需直接通信,就盡量不要產(chǎn)生直接交互,這樣可以降低模塊的耦合度,提高模塊的獨(dú)立性。

1、首先定義三個(gè)類,分別為公司類、明星類、粉絲類

/**
 * @author nuist__NJUPT
 * @ClassName Company
 * @description: 公司類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Company {
    private String name ;
    public Company(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
/**
 * @author nuist__NJUPT
 * @ClassName Star
 * @description: 明星類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Star {

    private String name ;

    public Star(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
/**
 * @author nuist__NJUPT
 * @ClassName Fans
 * @description: 粉絲類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Fans {
    private String name ;
    public Fans(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

2、定義一個(gè)經(jīng)紀(jì)人的類,通過(guò)該類實(shí)現(xiàn)明星與粉絲,以及明星與公司的交互,避免它們直接交互,降低模塊的耦合性,提高模塊的獨(dú)立性。

/**
 * @author nuist__NJUPT
 * @ClassName Agent
 * @description: 經(jīng)紀(jì)人類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Agent {
    private Star star ;
    private Company company ;
    private Fans fans ;

    public Star getStar() {
        return star;
    }

    public void setStar(Star star) {
        this.star = star;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public Fans getFans() {
        return fans;
    }

    public void setFans(Fans fans) {
        this.fans = fans;
    }

    /**
     * 粉絲見(jiàn)面方法
     */
     public void meeting(){
         System.out.println("明星:" + star.getName() + "與粉絲:" + fans.getName()+"見(jiàn)面");
     }
    /**
     * 與公司洽談
     */
    public void business(){
        System.out.println("明星:" + star.getName() + "與公司:" + company.getName()+"洽談");
    }

}

3.最后在測(cè)試類實(shí)例化經(jīng)紀(jì)人類,并調(diào)用相應(yīng)的方法。

/**
 * @author nuist__NJUPT
 * @ClassName Client
 * @description: 測(cè)試類
 * @date 2024年01月18日
 * @version: 1.0
 */
public class Client {
    public static void main(String[] args) {
        Agent agent = new Agent() ;
        agent.setStar(new Star("劉德華"));
        agent.setCompany(new Company("大碗娛樂(lè)公司"));
        agent.setFans(new Fans("張三"));

        agent.meeting();
        agent.business();
    }
}
1.4.6、合成復(fù)用原則

合成復(fù)用原則:盡量使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)習(xí)復(fù)用,而不是通過(guò)繼承的方式實(shí)現(xiàn)復(fù)用

因?yàn)槔^承首先破環(huán)了類的封裝性,父類暴露給子類了,同時(shí)子類與父類的耦合度高,另外繼承限制了復(fù)用的靈活性。

1.4.7、單一職責(zé)原則

單一職責(zé)原則,通俗的來(lái)說(shuō)就是盡量讓一個(gè)類中只負(fù)責(zé)一件事,當(dāng)然這個(gè)還是要結(jié)合實(shí)際情況來(lái)看。有些場(chǎng)景可以一個(gè)類中做多件事,然后子類繼承并重寫(xiě)方法。

我們假設(shè)有兩種動(dòng)物,分別呼吸空氣與水,那么可以定義兩個(gè)類,每個(gè)類中定義一個(gè)方法。這樣滿足單一職責(zé)原則。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-809476.html

/**
 * @author nuist__NJUPT
 * @ClassName Client
 * @description: 單一職責(zé)測(cè)試類
 * @date 2024年01月19日
 * @version: 1.0
 */
class Terrestrial{
    public void breathe(String animal){
        System.out.println(animal + "呼吸空氣");
    }
}
class Aquatic{
    public void breathe(String animal){
        System.out.println(animal + "呼吸水");
    }
}

public class Client{
    public static void main(String[] args){
        Terrestrial terrestrial = new Terrestrial();
        terrestrial.breathe("牛");
        terrestrial.breathe("羊");
        terrestrial.breathe("豬");

        Aquatic aquatic = new Aquatic();
        aquatic.breathe("魚(yú)");
    }
}  

到了這里,關(guān)于設(shè)計(jì)模式之7大設(shè)計(jì)原則-Java版的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一網(wǎng)打盡java注解-克隆-面向?qū)ο笤O(shè)計(jì)原則-設(shè)計(jì)模式

    一網(wǎng)打盡java注解-克隆-面向?qū)ο笤O(shè)計(jì)原則-設(shè)計(jì)模式

    注解 :也叫標(biāo)注,用于包、類、變量、方法、參數(shù)上??梢酝ㄟ^(guò)反射獲取標(biāo)注??梢栽诰幾g期間使用,也可以被編譯到字節(jié)碼文件中,運(yùn)行時(shí)生效。 內(nèi)置注解 :Java語(yǔ)言已經(jīng)定義好的注解。 @Overread :用于方法重寫(xiě)。 @Deprecated :標(biāo)記過(guò)時(shí)方法。 @SuppressWarnings :指示編譯器去

    2024年02月11日
    瀏覽(20)
  • 【Java開(kāi)發(fā)】設(shè)計(jì)模式 17:中介者模式

    中介者模式是一種行為設(shè)計(jì)模式,指用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。 中介者使各對(duì)象不需要顯示地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。在這個(gè)模式中,中介者負(fù)責(zé)協(xié)調(diào)各個(gè)對(duì)象間的通信,使其流程更加清晰簡(jiǎn)單。 ??? 場(chǎng)景 中介者

    2023年04月22日
    瀏覽(23)
  • 【單例設(shè)計(jì)模式原理詳解】Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【單例設(shè)計(jì)模式原理詳解】Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    單例模式(Singleton Pattern)屬于創(chuàng)建型設(shè)計(jì)模式,這種模式只創(chuàng)建一個(gè)單一的類,保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)該實(shí)例的全局節(jié)點(diǎn)。 當(dāng)您想控制實(shí)例數(shù)目,節(jié)省系統(tǒng)資源,并不想混用的時(shí)候,可以使用單例模式。單例有很多種實(shí)現(xiàn)方式,主要分為懶漢和餓漢模式

    2023年04月27日
    瀏覽(26)
  • 【原型設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【原型設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    原型模式(Prototype Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,使你能夠復(fù)制已有對(duì)象,而無(wú)需使代碼依賴它們所屬的類,同時(shí)又能保證性能。 這種模式是實(shí)現(xiàn)了一個(gè)原型接口,該接口用于創(chuàng)建當(dāng)前對(duì)象的克隆。當(dāng)直接創(chuàng)建對(duì)象的代價(jià)比較大時(shí),則采用這種模式。 如果你需要復(fù)制一些對(duì)

    2023年04月24日
    瀏覽(26)
  • 【策略設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【策略設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    策略模式(Strategy Pattern)屬于行為型設(shè)計(jì)模式。將每一個(gè)算法封裝到具有共同接口的獨(dú)立類中,根據(jù)需要來(lái)綁定策略,使得具體實(shí)現(xiàn)和策略解耦。 當(dāng)你想使用對(duì)象中各種不同的算法變體,使用if...else 所帶來(lái)的復(fù)雜和難以維護(hù),可使用策略模式?;蛘弋?dāng)有許多相同類,它們僅

    2024年02月01日
    瀏覽(21)
  • 【代理設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【代理設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    代理模式(Proxy Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,用一個(gè)類來(lái)代理另一個(gè)類或幾個(gè)類的功能。 在代理模式中,我們創(chuàng)建具有現(xiàn)有對(duì)象的對(duì)象,以便向外界提供功能接口。 延遲初始化(虛擬代理)。如果你有一個(gè)偶爾使用的重量級(jí)服務(wù)對(duì)象,一直保持該對(duì)象運(yùn)行會(huì)消耗系統(tǒng)資源

    2023年04月25日
    瀏覽(24)
  • 【迭代器設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【迭代器設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    迭代器模式(Iterator Pattern),是一種結(jié)構(gòu)型設(shè)計(jì)模式。給數(shù)據(jù)對(duì)象構(gòu)建一套按順序訪問(wèn)集合對(duì)象元素的方式,而不需要知道數(shù)據(jù)對(duì)象的底層表示。 迭代器模式是與集合共存的,我們只要實(shí)現(xiàn)一個(gè)集合,就需要同時(shí)提供這個(gè)集合的迭代器,就像Java中的Collection,List、Set、Map等

    2023年04月17日
    瀏覽(15)
  • 【享元設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【享元設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    享元模式(Flyweight Pattern),是一種結(jié)構(gòu)型設(shè)計(jì)模式。主要用于減少創(chuàng)建對(duì)象的數(shù)量,以減少內(nèi)存占用和提高性能。它摒棄了在每個(gè)對(duì)象中保存所有數(shù)據(jù)的方式,通過(guò)共享多個(gè)對(duì)象所共有的相同狀態(tài),讓你能在有限的內(nèi)存容量中載入更多對(duì)象。 當(dāng)程序需要生成數(shù)量巨大的相似

    2023年04月10日
    瀏覽(29)
  • 【模板方法設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    模板方法模式(Template Method Pattern)也叫模板模式,是一種行為型模式。它定義了一個(gè)抽象公開(kāi)類,包含基本的算法骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變算法的結(jié)構(gòu),只是重定義該算法的某些特定步驟。不同的子類以不同的方式實(shí)現(xiàn)這些抽象方法

    2024年02月01日
    瀏覽(22)
  • 【解釋器設(shè)計(jì)模式詳解】C/Java/Go/JS/TS/Python不同語(yǔ)言實(shí)現(xiàn)

    【解釋器設(shè)計(jì)模式詳解】C/Java/Go/JS/TS/Python不同語(yǔ)言實(shí)現(xiàn)

    解釋器模式(Interpreter Pattern)是一種行為型設(shè)計(jì)模式。這種模式實(shí)現(xiàn)了一個(gè)表達(dá)式接口,該接口解釋一個(gè)特定的上下文。這種模式常被用在 SQL 解析、符號(hào)處理引擎等。 解釋器模式常用于對(duì)簡(jiǎn)單語(yǔ)言的編譯或分析實(shí)例中,為了掌握好它的結(jié)構(gòu)與實(shí)現(xiàn),必須先了解編譯原理中的

    2023年04月12日
    瀏覽(1388)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包