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();
}
}