不懂設(shè)計(jì)模式終究是下層

sjms.jpg

單例模式

概念:確保一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
UML中帶==下劃線的屬性==是靜態(tài)的失尖;
如下特點(diǎn):

  1. 構(gòu)造方法私有
  2. 指向自己實(shí)例的私有靜態(tài)引用
  3. 以自己實(shí)例為返回值的公有靜態(tài)方法
    單例模式可詳細(xì)分為兩類咐扭, 餓單例模式槽畔,懶單例模式
/**
 * 餓漢式單例模式,在類被加載的時(shí)候就實(shí)例化好了對(duì)象
 */
public class SingleTon {
    public static SingleTon singleTon = new SingleTon();

    private SingleTon() {
    }

    public static SingleTon getSingleTon() {
        return singleTon;
    }
}
/**
 * 懶漢式單例模式愕提,在調(diào)用實(shí)例化方法的時(shí)候才會(huì)創(chuàng)建它的實(shí)例
 */
public class SingleTon {
    public static SingleTon singleTon;

    private SingleTon() {
    }

    public static synchronized SingleTon getSingleTon() {
        if (singleTon == null) {
            singleTon = new SingleTon();
        }
        return singleTon;
    }

}

單例模式的優(yōu)點(diǎn):

  1. 在內(nèi)存中只有一個(gè)對(duì)象涕蜂,節(jié)省內(nèi)存空間
  2. 避免頻繁的創(chuàng)建銷毀對(duì)象华匾,加快效率
  3. 避免對(duì)共享資源的多重占用
  4. 可以全局訪問(wèn)
    適用場(chǎng)景:
  5. 只能適用單例類提供的方法來(lái)獲取單例對(duì)象,使用反射會(huì)創(chuàng)建新的對(duì)象
  6. 多線程使用單例模式時(shí)宇葱,要注意線程安全
  7. 不要做斷開(kāi)單例類對(duì)象與類中靜態(tài)引用的危險(xiǎn)操作瘦真。(╯°Д°)╯︵┻━┻

在java中餓漢要優(yōu)于懶漢,還要因?yàn)闃?gòu)造方法是私有的黍瞧,所以不能被繼承ε(┬┬﹏┬┬)3

工廠方法模式

概念:定義一個(gè)創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類原杂,工廠方法模式使一個(gè)類的實(shí)例化延遲到了子類印颤。

interface IProduct {
    public void productMethod();
}

class Product implements IProduct {

    @Override
    public void productMethod() {
        System.out.println("產(chǎn)品");
    }
}

interface IFactory {
    public IProduct createProduct();
}

class Factory implements IFactory {

    @Override
    public IProduct createProduct() {
        return new Product();
    }
}

public class FactoryClient {

    public static void main(String[] arg) {
        IFactory factory = new Factory();
        IProduct product = factory.createProduct();
        product.productMethod();
    }

}

工廠模式根據(jù)抽象程度分為三種:簡(jiǎn)單工廠模式(靜態(tài)工廠模式),工廠方法模式穿肄,抽象工廠模式年局。
主要優(yōu)點(diǎn):

  1. 使代碼結(jié)構(gòu)清晰际看,有效的封裝變化。在編程中有些產(chǎn)品的實(shí)例化是比較復(fù)雜的多變的矢否,通過(guò)工廠模式仲闽,將產(chǎn)品的實(shí)例化過(guò)程封裝起來(lái),使用者不用管產(chǎn)品的實(shí)例化過(guò)程僵朗,只需要依賴工廠即可得到產(chǎn)品對(duì)象赖欣。
  2. 調(diào)用者屏蔽了具體的產(chǎn)品類,即使產(chǎn)品的實(shí)現(xiàn)發(fā)生了變化验庙,調(diào)用只關(guān)心或者依賴產(chǎn)品的接口就好了顶吮,不會(huì)產(chǎn)生任何影響。
  3. 降低耦合度粪薛,產(chǎn)品的實(shí)例化通常是比較復(fù)雜的悴了,需要依賴很多的類,而這些類對(duì)于調(diào)用者來(lái)說(shuō)無(wú)需知道违寿,工廠只是把最終的產(chǎn)品對(duì)象湃交,交給調(diào)用者,產(chǎn)品所依賴的類都是不存在的ヾ(????)?"

通過(guò)工廠方法模式的類圖可以看出藤巢,工廠模式有四個(gè)要素:

  1. 工廠接口搞莺,是工廠方法模式的核心,用于與調(diào)用者交互菌瘪,用來(lái)提供產(chǎn)品腮敌。
  2. 工廠實(shí)現(xiàn),決定如何實(shí)現(xiàn)產(chǎn)品俏扩,有多少種產(chǎn)品糜工,就要有多少種工廠實(shí)現(xiàn)。
  3. 產(chǎn)品接口录淡,所有產(chǎn)品都必須遵守產(chǎn)品接口所定義的規(guī)范捌木,產(chǎn)品接口也是調(diào)用者最關(guān)心的,產(chǎn)品接口定義的好壞嫉戚,決定了代碼的穩(wěn)定性刨裆,與工廠接口一樣,可以用抽象類來(lái)代替彬檀,但是不能違反里氏替換原則ヽ(#`Д′)?┌┛〃
  4. 產(chǎn)品實(shí)現(xiàn)帆啃,決定了產(chǎn)品的在客戶端的具體行為。

適用場(chǎng)景:
作為“創(chuàng)建類模式”窍帝,在任何需要生成復(fù)雜對(duì)象的地方努潘,都可以使用工廠模式。
如果創(chuàng)建一個(gè)類需要大量的依賴其他類,那么調(diào)用者就會(huì)產(chǎn)生很強(qiáng)的耦合度疯坤,這時(shí)候可以考慮使用工廠模式报慕,來(lái)降低調(diào)用者與外界的耦合度。

抽象工廠模式

建造者模式

定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與表示分離压怠,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示眠冈。
類型:創(chuàng)建類模式
四個(gè)要素:

  1. 產(chǎn)品類,一般是一個(gè)創(chuàng)建過(guò)程較為復(fù)雜的對(duì)象菌瘫,在實(shí)際編程中蜗顽,產(chǎn)品類可以是一個(gè)抽象類,或多個(gè)抽象類及其實(shí)現(xiàn)子類組成突梦;
  2. 抽象建造者诫舅,為了將具體的建造過(guò)程交于他的子類實(shí)現(xiàn),更容易擴(kuò)展宫患,最少有兩個(gè)方法刊懈,一個(gè)是建造產(chǎn)品,一個(gè)是返回產(chǎn)品娃闲。
  3. 建造者虚汛,實(shí)現(xiàn)抽象建造者的方法,組建產(chǎn)品皇帮,返回組建好的產(chǎn)品卷哩。
  4. 導(dǎo)演類,調(diào)用適當(dāng)?shù)慕ㄔ煺邅?lái)組建產(chǎn)品属拾,一般不與產(chǎn)品發(fā)生依賴将谊,用于封裝程序中易變的部分(?`?′)/
class Product {
    private String name;
    private String type;

    public void setName(String name) {
        this.name = name;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void showProduct() {
        System.out.println("name = " + name);
        System.out.println("type = " + type);
    }
}

abstract class Builder {
    public abstract void setPart(String arg1, String arg2);
    public abstract Product getProduct();
}

class ConcreteBuilder extends Builder {
    private Product product = new Product();

    @Override
    public void setPart(String arg1, String arg2) {
        product.setName(arg1);
        product.setType(arg2);
    }

    @Override
    public Product getProduct() {
        return product;
    }
}

/**
 * 導(dǎo)演讓你創(chuàng)建啥,你就創(chuàng)建啥ヾ(o?ω?)?
 */
class Director {
    private Builder builder = new ConcreteBuilder();

    public Product getAProduct() {
        builder.setPart("保時(shí)捷", "卡宴");
        return builder.getProduct();
    }

    public Product getBProduct() {
        builder.setPart("鳳凰牌", "自行車");
        return builder.getProduct();
    }
}

public class BuilderClient {
    public static void main(String[] args) {
        Director director = new Director();
        Product p1 = director.getAProduct();
        p1.showProduct();
        Product p2 = director.getBProduct();
        p2.showProduct();
    }

}

建造者模式的優(yōu)點(diǎn):

  1. 一般產(chǎn)品類和建造者類都是比價(jià)穩(wěn)定的渐白,因此尊浓,將主要邏輯,以及具體實(shí)現(xiàn)纯衍,這些易變的部分封裝在了導(dǎo)演類中栋齿。
  2. 當(dāng)有現(xiàn)需求時(shí)候,只要實(shí)現(xiàn)一個(gè)新的建造者類就可以不動(dòng)之前經(jīng)過(guò)測(cè)試的代碼了襟诸,不會(huì)引入風(fēng)險(xiǎn)瓦堵。
    建造者模式與工廠模式的區(qū)別:
    與工廠模式相比,建造模式一般用來(lái)創(chuàng)建更加復(fù)雜的對(duì)象歌亲, 因?yàn)楦訌?fù)雜的對(duì)象創(chuàng)建過(guò)程菇用,需要一個(gè)導(dǎo)演類將這個(gè)復(fù)雜的創(chuàng)建過(guò)程獨(dú)立出來(lái)。也就是說(shuō)工廠模式將所有的對(duì)象創(chuàng)建過(guò)程封裝在工廠中陷揪,有工廠類想客戶端提供最終的產(chǎn)品刨疼。而建造者模式中泉唁,建造者只提供產(chǎn)品的各個(gè)組件的建造鹅龄,然后將具體的建造過(guò)程交給導(dǎo)演類揩慕,由導(dǎo)演類將各個(gè)組件的建造特定的規(guī)則組成產(chǎn)品,交給客戶端扮休。

原型模式(Prototype)

定義:用原型實(shí)例指定創(chuàng)建對(duì)象的種類迎卤,并通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
類型:創(chuàng)建類模式
原型模式主要用于對(duì)象的復(fù)制玷坠,它的核心就是原型類prototype蜗搔,prototype需要具備兩個(gè)條件

  • 實(shí)現(xiàn)Cloneable接口,它的作用只有一個(gè)八堡,就是通知虛擬機(jī)可以安全的在實(shí)現(xiàn)了此接口的類上使用clone方法樟凄。只有實(shí)現(xiàn)了這個(gè)接口的類才可以被clone。
  • 重寫(xiě)clone方法兄渺,將權(quán)限修飾符修改為public缝龄,

模板方法模式(template)

定義:定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類中去挂谍,使子類可以不改變算法的結(jié)構(gòu)叔壤,即可重新定義某些特性的步驟.

架構(gòu)師將整個(gè)應(yīng)用的大體邏輯,試用大量的接口或者抽象類講真?zhèn)€系統(tǒng)串起來(lái)口叙,然后根據(jù)實(shí)現(xiàn)的難度不同交給高級(jí)工程師炼绘,初級(jí)工程師,由他們來(lái)實(shí)現(xiàn)子類妄田,完成開(kāi)發(fā)俺亮。
模板方法模式的結(jié)構(gòu):

模板方法模式由一個(gè)抽象類和一組(n>=1)子類組成,抽象類中方法分為三種

  1. 抽象方法疟呐,父類只聲明而不實(shí)現(xiàn)脚曾,定義好規(guī)范,然后由其子類去實(shí)現(xiàn)萨醒。
  2. 模板方法斟珊,由抽象類聲明并加以實(shí)現(xiàn),一般來(lái)說(shuō)模板方法調(diào)用抽象方法來(lái)完成主要的邏輯功能富纸,并且囤踩,模板方法大多數(shù)會(huì)定義成final類型,指明主要的邏輯在子類中無(wú)法被重寫(xiě)晓褪。
  3. 鉤子方法堵漱,由抽象類聲明并加以實(shí)現(xiàn),但是子類可以去擴(kuò)展涣仿,子類可以通過(guò)擴(kuò)展鉤子方法勤庐,來(lái)影響模板方法的邏輯示惊。
  4. 抽象類的任務(wù)是搭建邏輯框架,通常由經(jīng)驗(yàn)豐富的人愉镰,抽象類的好壞直接決定了程序是否穩(wěn)定米罚,
  5. 實(shí)現(xiàn)類用來(lái)實(shí)現(xiàn)細(xì)節(jié),模板方法正式通過(guò)實(shí)現(xiàn)類中擴(kuò)展的方法來(lái)完成邏輯丈探,只要實(shí)現(xiàn)類中擴(kuò)展方法通過(guò)了單元測(cè)試录择,在模板方法正確的前提下,一般整體不會(huì)出現(xiàn)太大的錯(cuò)誤碗降。

適用場(chǎng)景:

  • 容易擴(kuò)展隘竭,一般來(lái)說(shuō),抽象類中的模板方法是不易發(fā)生改變的部分讼渊,而抽象方法式容易發(fā)生改變的部分动看,因此通過(guò)增加實(shí)現(xiàn)類一般很容易實(shí)現(xiàn)功能的擴(kuò)展,符合開(kāi)閉原則爪幻。
  • 便于維護(hù)菱皆,對(duì)于模板方法模式來(lái)說(shuō),正是由于他們的主要邏輯相同笔咽,才使用模板方法搔预。
  • 靈活,因?yàn)橛秀^子方法叶组,因此子類的實(shí)現(xiàn)也可以影響父類的主要運(yùn)行邏輯拯田,但是卻違反了里氏替換原則。
  • 多個(gè)子類擁有相同的方法甩十,并且這些方法的邏輯相同的情況下可以使用模板方法模式船庇,在程序的主框架相同,細(xì)節(jié)不同的情況下侣监,比較適合使用這種模式鸭轮。

中介者模式

定義:用一個(gè)中介者對(duì)象封裝一些列的交互對(duì)象,中介者使個(gè)對(duì)象不需要顯示的互相作用橄霉,從而降低耦合窃爷,而且可以獨(dú)立的改變他們之間的交互。
結(jié)構(gòu):中介者模式又稱為調(diào)停者模式姓蜂,氛圍三部分

  1. 抽象中介者按厘,定義好同事類對(duì)象到中介者對(duì)象的接口,用于各同事類之間的通訊钱慢,一般包括一個(gè)或者多個(gè)抽象的時(shí)間方法逮京,并由子類去實(shí)現(xiàn)。
  2. 中介者實(shí)現(xiàn)類:從抽象中介者繼承而來(lái)束莫,實(shí)現(xiàn)抽象中介者中定義的事件方法懒棉。從一個(gè)同事類接收消息草描,然后通過(guò)消息影響其他同時(shí)類。
  3. 如果一個(gè)對(duì)象會(huì)影響其他的對(duì)象策严,同時(shí)也會(huì)被其他對(duì)象影響穗慕,那么這兩個(gè)對(duì)象稱為同事類。在類圖中享钞,同事類只有一個(gè)揍诽,這其實(shí)是現(xiàn)實(shí)的省略,在實(shí)際應(yīng)用中栗竖,同事類一般由多個(gè)組成,他們之間相互影響渠啤,相互依賴狐肢。同事類越多,關(guān)系越復(fù)雜沥曹。并且份名,同事類也可以表現(xiàn)為繼承了同一個(gè)抽象類的一組實(shí)現(xiàn)組成。在中介者模式中妓美,同事類之間必須通過(guò)中介者才能進(jìn)行消息傳遞僵腺。

代理模式

為其他對(duì)象提供一種代理以控制這個(gè)對(duì)象的訪問(wèn)。

結(jié)構(gòu):

  1. Subject抽象主題角色壶栋,可以是抽象類也可以是一個(gè)接口辰如,普通業(yè)務(wù)類型的定義,無(wú)特殊要求贵试。
  2. RealSubject具體角色琉兜,被委托角色,業(yè)務(wù)邏輯具體執(zhí)行者毙玻。
  3. Proxy代理角色豌蟋,負(fù)責(zé)對(duì)真實(shí)角色的應(yīng)用,把所有抽象主題的方法桑滩,委托給真是主題角色實(shí)現(xiàn)梧疲,并且在真實(shí)角色處理完畢前后座預(yù)處理和善后工作。

模板代碼:

interface Subject {
    void request();
}

class RealSubject implements Subject {
    private String name;

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

    @Override
    public void request() {
        System.out.println("name = " + name);
    }
}

class Proxy implements Subject {
    private Subject subject = null;

    public Proxy(Subject subject) {
        this.subject = subject;
    }

    @Override
    public void request() {
        this.before();
        this.subject.request();
        this.after();
    }

    //預(yù)處理工作
    private void before() {
        System.out.println(System.currentTimeMillis() + "預(yù)處理工作");
    }

    //善后工作
    private void after() {
        System.out.println(System.currentTimeMillis() + "善后工作");
    }
}

public class ClientProxy {
    public static void main(String[] args) {
        Subject subject = new RealSubject("zhangsan");
        Subject proxy = new Proxy(subject);
        proxy.request();
    }
}
1506480477076預(yù)處理工作
name = zhangsan
1506480477076善后工作

代理模式優(yōu)點(diǎn):

  1. 職責(zé)清晰运准,真是角色就是實(shí)現(xiàn)實(shí)際的業(yè)務(wù)邏輯幌氮,不用關(guān)心其他非本職事物,
  2. 高擴(kuò)展性戳吝,具體主題角色可以隨時(shí)改變浩销,只要實(shí)現(xiàn)了接口,甭管怎么變化听哭,都逃不出我的手心慢洋,代理類可以不改變的情況下使用塘雳。
  3. 智能化,︵╰(‵□′)╯︵┻━┻

觀察者模式

定義:定義對(duì)象間一種一對(duì)多的依賴關(guān)系普筹,使得當(dāng)每一個(gè)對(duì)象改變狀態(tài)败明,則所有依賴于它的對(duì)象,都會(huì)的到通知并自動(dòng)更新太防。

observe

在軟件系統(tǒng)中通常會(huì)有這樣的需求妻顶,如果一個(gè)對(duì)象的狀態(tài)發(fā)生改變,某些與他先關(guān)的對(duì)象也要做出改變蜒车。

結(jié)構(gòu):

  1. 被觀察者讳嘱,從類圖中可以看到,類中有一個(gè)用來(lái)存放觀察者對(duì)象的Vector的容器酿愧,(在多線程中Vector是線程安全的沥潭,而不是用list),這個(gè)集合是被觀察者的核心嬉挡,另外有三個(gè)方法钝鸽,attach方法,向這個(gè)容器中添加觀察者對(duì)象庞钢,detach方法拔恰,從容器中移除觀察者對(duì)象,notify方法基括,依次調(diào)用觀察對(duì)象的對(duì)應(yīng)方法颜懊。這個(gè)角色可以是是接口,也可以是抽象類或者具體的類阱穗,因?yàn)楹芏嗲闆r是和其他模式一起使用饭冬。
  2. 觀察者,觀察者角色一般是一個(gè)接口揪阶,它只有一個(gè)update方法昌抠,在被觀察者狀態(tài)發(fā)生改變是,這個(gè)方法就會(huì)被觸發(fā)調(diào)用鲁僚。
  3. 具體的被觀察者炊苫,使用這個(gè)角色是為了便于擴(kuò)展,可以在此角色中定義具體的業(yè)務(wù)邏輯冰沙。
  4. 具體的觀察者侨艾,定義被觀察者狀態(tài)發(fā)生改變時(shí),回調(diào)的觀察者對(duì)象具體處理的邏輯拓挥。
/**
 * 被觀察者
 */
abstract class Observeable {
    private Vector<Observer> vector = new Vector();

    public void addObserve(Observer obs) {
        this.vector.add(obs);
    }

    public void removeObserve(Observer obs) {
        this.vector.remove(obs);
    }

    protected void notifyObserve() {
        for (Observer observer : vector) {
            observer.update();
        }
    }

    public abstract void doSomething();
}

/**
 * 被觀察者實(shí)例
 */
class ContractObserve extends Observeable {

    @Override
    public void doSomething() {
        System.out.println("被觀察者事件發(fā)生");
        this.notifyObserve();
    }
}

interface Observer {
    void update();
}

/**
 * 實(shí)例觀察者1
 */
class ConcreteObserve1 implements Observer {

    @Override
    public void update() {
        System.out.println("觀察者1收到信息唠梨,并進(jìn)行處理");
    }
}

/**
 * 實(shí)例觀察者2
 */
class ConcreteObserve2 implements Observer {

    @Override
    public void update() {
        System.out.println("觀察者2收到信息,并進(jìn)行處理");
    }
}

public class ObserveClient {

    public static void main(String[] args) {
        //創(chuàng)建被觀察者
        //這里真正new的都是實(shí)現(xiàn)子類
        Observeable obs = new ContractObserve();
        obs.addObserve(new ConcreteObserve1());
        obs.addObserve(new ConcreteObserve2());
        obs.doSomething();
    }
}

觀察者模式的優(yōu)點(diǎn):
觀察者與被觀察者之間是一種輕度的關(guān)聯(lián)關(guān)系侥啤,并且是抽象耦合的当叭,這樣對(duì)于二者來(lái)說(shuō)都比較容易擴(kuò)展茬故。觀察者模式是一種常用的觸發(fā)機(jī)制,它形成一條觸發(fā)鏈蚁鳖,依次對(duì)各個(gè)觀察者的方法進(jìn)行處理磺芭,但同時(shí)由于是鏈?zhǔn)接|發(fā),所以當(dāng)觀察者較多的時(shí)候醉箕,性能是比較擔(dān)憂的钾腺,

責(zé)任鏈模式

定義:使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系讥裤,將這些對(duì)象連成一條線放棒,并沿著這條線傳遞這些請(qǐng)求,知道有對(duì)象處理請(qǐng)求為止坞琴。

策略模式

定義:定義一組算法哨查,將每個(gè)算法都封裝起來(lái),并且使他們之間可以相互轉(zhuǎn)換剧辐。
策略模式是把算法封裝到一系列的類中去,并且這些類實(shí)現(xiàn)相同的接口邮府,相互之間可以相互替換荧关。他與模板方法的區(qū)別在于,在模板方法模式中調(diào)用算法的主體在抽象的父類中褂傀,而在策略模式中忍啤,調(diào)用算法的主體則是在封裝了Context的封裝類中。

結(jié)構(gòu):

  1. 封裝類仙辟,也叫上下文同波,對(duì)策略進(jìn)行二次封裝,目的是避免高層模塊對(duì)策略的直接調(diào)用叠国。
  2. 抽象策略未檩,通常情況下為一個(gè)接口,當(dāng)各個(gè)類中出現(xiàn)重復(fù)的邏輯時(shí)候粟焊,使用抽象類來(lái)封裝這部分代碼冤狡,此時(shí)會(huì)看上去像是模板方法。
  3. 具體策略项棠,具體策略通常由一組封裝了算法的類來(lái)?yè)?dān)任,這些類之間可以根據(jù)需要自由替換。

策略模式的優(yōu)點(diǎn)

  1. 策略類之間可以相互轉(zhuǎn)換诲泌,由于策略類實(shí)現(xiàn)自統(tǒng)一個(gè)抽象市俊,所以他們之間可以自由切換。
  2. 易于擴(kuò)展透典,增加一個(gè)新的策略模式非常的簡(jiǎn)單晴楔,可以在不修改原有代碼的基礎(chǔ)上進(jìn)行擴(kuò)展顿苇。
  3. 避免使用多重條件,如果不使用策略模式滥崩,所有的算法需要用條件語(yǔ)句去進(jìn)行連接岖圈,這樣的做法非常不容易維護(hù)。
  4. 維護(hù)各個(gè)策略類給開(kāi)發(fā)者帶來(lái)額外的開(kāi)銷钙皮。
  5. 客戶端必須要知道所有策略類的區(qū)別蜂科,然后決定用哪一個(gè),但是有違背迪米特法則短条。
    ヽ(`Д′)?︵ ┻━┻

適用場(chǎng)景:
策略模式實(shí)際上就是面向?qū)ο笾械睦^承和多態(tài)导匣。

  1. 幾個(gè)類的主要邏輯相同,只是部分邏輯和算法上有所區(qū)別的情況茸时。
  2. 有相似的行為贡定,或者算法,客戶端需要?jiǎng)討B(tài)的取決定使用哪一個(gè)可都,那么可以使用策略模式缓待,將這些算法封裝起來(lái)供客戶端調(diào)用。
  3. 一般與工廠方法模式渠牲,模板方法模式混合使用情況較多旋炒。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市签杈,隨后出現(xiàn)的幾起案子瘫镇,更是在濱河造成了極大的恐慌,老刑警劉巖答姥,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铣除,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鹦付,警方通過(guò)查閱死者的電腦和手機(jī)尚粘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)睁壁,“玉大人背苦,你說(shuō)我怎么就攤上這事∨嗣鳎” “怎么了行剂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)钳降。 經(jīng)常有香客問(wèn)我厚宰,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任铲觉,我火速辦了婚禮澈蝙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撵幽。我一直安慰自己灯荧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布盐杂。 她就那樣靜靜地躺著逗载,像睡著了一般。 火紅的嫁衣襯著肌膚如雪链烈。 梳的紋絲不亂的頭發(fā)上厉斟,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音强衡,去河邊找鬼擦秽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漩勤,可吹牛的內(nèi)容都是我干的感挥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼越败,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼链快!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起眉尸,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巨双,沒(méi)想到半個(gè)月后噪猾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筑累,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年袱蜡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慢宗。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坪蚁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镜沽,到底是詐尸還是另有隱情敏晤,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布缅茉,位于F島的核電站嘴脾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜译打,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一耗拓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奏司,春花似錦乔询、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至麻献,卻和暖如春们妥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勉吻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工监婶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人齿桃。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓惑惶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親短纵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子带污,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用香到、多...
    MinoyJet閱讀 3,922評(píng)論 1 15
  • 設(shè)計(jì)模式基本原則 開(kāi)放-封閉原則(OCP)鱼冀,是說(shuō)軟件實(shí)體(類、模塊悠就、函數(shù)等等)應(yīng)該可以拓展千绪,但是不可修改。開(kāi)-閉原...
    西山薄涼閱讀 3,775評(píng)論 3 14
  • 創(chuàng)建型模式 抽象工廠模式(abstract facroty) 3.1模式動(dòng)機(jī) 在工廠方法模式中具體工廠負(fù)責(zé)生產(chǎn)具體...
    僚機(jī)KK閱讀 728評(píng)論 0 2
  • 一梗脾、設(shè)計(jì)模式的分類 總體來(lái)說(shuō)設(shè)計(jì)模式分為三大類: 創(chuàng)建型模式荸型,共五種:工廠方法模式、抽象工廠模式炸茧、單例模式瑞妇、建造者...
    RamboLI閱讀 747評(píng)論 0 1
  • 接觸前端兩三個(gè)月的時(shí)候,那時(shí)候只是聽(tīng)說(shuō)設(shè)計(jì)模式很重要梭冠,然后我就去讀了一本設(shè)計(jì)模式的書(shū)辕狰,讀了一部分,也不知道這些設(shè)計(jì)...
    艱苦奮斗的侯小憨閱讀 3,033評(píng)論 2 39