今天很开心能阅读《源码设计模式设计与解析》这本大作。
1. 工厂模式
最核心的语句为:Product a = new Factory.createProduct();
一般生产者和机器都会有抽象父类和实现具体业务逻辑的子类。更完美的进阶是:
public abstract class Factory {
public abstract <T extends Product> T createProduct(Class<T> clz) ;
}
而具体的工厂类,则为
public <T extends Product> T create Product(Class<T> clz) {
Product p = (Product) Class.forName(clz.getName()).newInstance();//这里应该是用到了反射,并通过类名声明了对象。关于反射,我因为没有练习,所以很快就忘了。
}
所以最后的实现就很完美了:
Product a = new Factory.createProduct(ConcreteProductB.class);
当然,再如果不需要抽象类的话,可以用简单工厂模式(静态工厂模式):
public static Product createProduct() {
return new ConcreteProduct();
}
一个特别尴尬的事情是:onCreate方法相当于工厂方法。
背景:activityThread的attach方法会将其绑定到AMS中,开始不但的读取消息队列中的消息并分发消息。
这又透露了一个消息,就是重载继承的用法:@Override onCreate(),这个方法是子类继承父类,并且父类会在某个时刻调用这个由子类重写的方法。
工厂模式是很普遍的一个模式,太普遍了,以至于很多其他模式都会或多或少的混合这种模式。
2.抽象工厂模式
抽象工厂模式有点没看懂。它的主要思路是为了应对弱关系的组合,为相关或者相互依赖对象提供一个借口,不用指定具体类。相当于在工厂模式上抽出了一个接口,让有差异的产品能够统一管理。
public interface IEngine() {
void engine();
}
public class DomeSticEngine implements IEngine {
@Override public void engine() {
//
}
public class DomeSticEngine2 implements IEngine {
@Override public void engine() {
//
}