Java设计模式之二:抽象工厂AbstractFactory

来源:互联网 发布:剑侠情缘2白金版 mac 编辑:程序博客网 时间:2024/05/22 10:26

Java设计模式之抽象工厂:AbstractFactory

由于是从OC 建立的面相对象思想,以为面相对象的思想就这么简单呢。但是今天看了Java设计模式之工厂设计模式,觉得凌乱了,Java的设计思想真是高深,如若熟练掌握,定能够有所作为。

先说下OC的继承功能,父类的属性可以被子类继承,但是interface接口就不是一个概念了,网上大家都将oc中的interface理解为“非正式协议(或说接口)”,prototal理解为“正式协议(或说接口)”,而java的interface则人可以认为是继承。瞬间觉得接口被扭曲了。

有人归结得出:

1、protocal就类似于java中的interface;

我要说的是虽然都是实现别人提供的方法,但是有区别的是oc的类遵守别人的协议成为别人的代理,才能实现别人的方法,但是java的interface则认为是继承关系,实现某个方法理所当然,附上草图说明,有不同的见解的话,欢迎指出交流。

debug调试:

见证奇迹的时刻:





2、而interface和implementation共同代表一个类,两者的组合相当于java中的class,即oc中的类必须包括两部分,interface部分和implementation部分,这才是oc中的一个类的完整声明;然后OC中将成员变量和成员方法的声明部分放置在interface部分中,包括继承关系,protocal实现关系,都在interface里面的头部进行声明,然后将实现部分放置在implementation部分中,相当于是将类拆分成声明和实现两部分,这两部分缺一不可,所以在OC中,不妨不要将interface叫做接口,直接叫做类声明部分来得容易理解多了(这句话颇为赞同),简而言之,oc中interface是类的一个部分,和implementation共同组成一个完整的类。

我想说的是oc的implement和Java的interface又有点类似,都是为了扩展功能,提供充足的方法来用。


然后附上设计模式学习:

public class AbstractFactoryTest {


public static void main(String[] args) {


//生产接口的父类

Provider provider =new SendMailFactory();

Sender senderInfo =provider.produce();

senderInfo.Send(); 

}

}

/**

 *    Provider:生产接口  提供生产功能:produce()     Sender:发送接口 提供发功能:send()

 * 

 *mailFactory  实现了生产接口 专门负责生产邮件服务   发送的接口父类:专门负责发送(父类类型指向子类对象)

 *

 *

 * 

 */



/**

 * 此类只为提供 生产接口

 * @authorycf

 *

 */

public interface Provider {


public Sender produce() ;

}

/**

 * 提供发送的接口

 * @author ycf

 *

 */

public interface Sender {


public void Send ();

}


/**

 * 邮件生产工厂 实现生产方法

 * @author ycf

 *

 */

public class SendMailFactoryimplements Provider {

public Sender produce() {

return new MailSender();

}

}


其实这个模式的好处就是,如果你现在想增加一个功能:发信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。这样做,拓展性较好!


0 0
原创粉丝点击