亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

回調——工廠方法模式

工厂方法

定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

解读

之前一直觉得很拗口,看不懂。他实际上是这个意思,先定义一个基类,基类有一个成员属性,这个属性是某个对象。然后围绕这个对象有一系列操作和新建的接口,操作的接口实现写在基类中,但是新建的接口定义为抽象方法,由子类去实现。这就是 类的实例化 延迟到子类的意思。即其他操作我可以定义在基类中,但是创建属性的接口我一定是写在派生类中的。

适用场景

  • 当一个类不知道它所必须创建的对象的类的时候。
  • 当一个类希望由它的子类来指定所创建的对象的时候。
  • 当类将创建对象的职责委托给多个子类中的某一个。

这些是设计模式书中的介绍,都很晦涩难懂哈我觉得我反正没看懂= =

思考

有点像回调方法有没有,将实际需要执行的方法委托给其他对象去做。回调方法是委托给低层对象,低层对象回传需要执行的方法,因为高层对象不知道具体要执行什么方法。(通俗的讲就是将方法作为参数传递,再通俗就是ajax的success:function(),ajax不知道拿到数据该怎么办,就由传进来的func去决定。)这里同样的,基类不知道如何去创建类,所以由它的派生类去决定。

类似的操作可以是将实例化延迟到子类,也可以是将某个操作延迟到子类吧,甚至任何意义上的基类无法确定的操作都可以延迟到子类

变体

如同单例也有饿汉饱汉一样,工厂方法也有一些变体

有默认实现

给工厂方法定义一个默认实现,子类可以覆盖他或不覆盖他

没有默认实现

不定义默认实现,子类必须实现该接口。

参数化

在基类的创建接口中定义一个参数用于指定生成不同的类,如果是1就生成A类,如果是2就生成B类。派生类需要复写创建方法,最后调用父类方法。

public class ShapeCreator{
    public Shape create(int type){
        switch(type){
            case 1:
                return new Circle();
                break;
            case 2:
                return new Rect();
                break;
            default:
                return new Triangle();
                break;
        }
    }
}

public class MyShapeCreator{
    public Shape create(int type){
        switch(type){
            case 1:
                return new Circle();
                break;
            case 2:
                return new Rect();
                break;
            default:
                return super.create(type);
                break;
        }
    }
}

因为子类只覆盖特定的几个生成,如果都不符合的话还是把创建的工作交给父类。

优缺点

如果用传统的实现方式,需要实例化的类型过多的话会出现类爆炸的问题。每添加一个子类型就要新建一个类

原则

感觉用了开闭原则,在不修改原有类(基类和其他扩展类)的情况下扩展。

點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
全棧工程師
手記
粉絲
2663
獲贊與收藏
74

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消