前言

        今天开始正式步入了架构设计的学习海洋,架构设计更多的是站一个设计者的角度去看待问题,比如说一个三方框架,它其中肯定是用了很多设计模式,当设计者在最出设计的时候总会去考虑到代码的安全性,模块间的耦合度不能太高,当然上面也只是我个人的理解。
        学习架构方面的知识之前,我们得会去画UML图,因为当代码结构变复杂后,没有一个清楚的设计图,过段时间哪怕是设计者都会不清楚当时自己是怎么写的,所以UML类图是分析架构以及设计架构最重要的。这里就不多讲如何去画图。下面是我找的一些相关的资料:
      UML建模_类图.docx       UML建模_用例图.docx       UML建模_时序图.docx

模式1、:简单工厂模式

        架构设计离不开设计模式,这里先介绍第一种设计模式简单工厂设计模式,简单工厂设计模式的优点是能提供创建对象的功能,而我们的开发者不需要关心具体的实现,降低客户端与模块之间的耦合度(最少知识原则)。
        实现:


class ImplA implements Api {

}

class ImplB implements Api {

}

class ImplC implements Api {

}

public interface Api {

}

public class Factory {

    public static Api create(int type){
        switch (type) {
        case 1:
            return new ImplA();
        case 2:
            return new ImplB();
        case 3:
            return new ImplC(); 
        default:
            return new ImplC();
        }
    }

}

public class Client {

    public static void main(String[] args) {
        Api obj = Factory.create(2);
        obj = Factory.create(3);
    }
}


在Client中不需要去关注对象的内部实现细节,只需要去传递相应的TYPE就能得到相应的实例对象,这也符合了架构设计中的最少知识原则,就是让开发者不需要清楚内部的实现细节就能完成对象的获取并使用。这种模式在很多三方框架里也用的很多,BitmapFactory就是典型的简单工厂模式。

模式2、:工厂方法模式

工厂方法模式的特点就是把对象的实现延迟到子类完成。实现如下:


//所有的产品必须实现这个共同接口,这样使用这些产品的类就可以引用这个接口而不是这个类了
public interface Product {


}

//Creator是一个类,它实现了所有的操作产品方法,但不实现工厂方法;Creator所有子类都必须实现这个抽象方法
public abstract class Creator {

    /**
     * 创建Product的工厂方法
     * @return
     */
    protected abstract Product factoryMethod();

    /**
     * 示意,会使用产品的某些功能
     */
    public void someOperation(){
        Product p = factoryMethod();
        //使用产品
        //p.
    }   
}

//具体的产品
//ConcreteProduct负责创建一个或多个具体的产品,只有Product类知道如何创建这些产品
public class ConcreteProduct implements Product{

}

//具体的创建器
//Creator实现了父类的抽象方法,以实际制造出产品
public class ConcreteCreator extends Creator{

    @Override
    protected Product factoryMethod() {
        return new ConcreteProduct();
    }

}


模式3、:抽象工厂模式

        抽象工厂模式顾名思义就是将工厂也作为一个抽象类,也就是一个抽象的简单工厂模式。实现如下:

public interface IApi {
    public void show();
}

public class IOSApi implements IApi{
    @Override
    public void show() {
        System.out.println("我是 IOS的api");
    }
}

public class AndroidApi  implements IApi {
    @Override
    public void show() {
        System.out.println(" 我是Android  Api");
    }
}

public interface IFactory {
    IApi createApi();
}

public   class IOSFactory implements IFactory{
    @Override
    public IApi createApi() {
        return new IOSApi();
    }
}

public class AndroidFactory implements IFactory{
    @Override
    public IApi createApi() {
        return new  AndroidApi();
    }
}

public class Client {
    public static void main(String[] args) {
        IFactory factory=new IOSFactory();
        factory.createApi().show();
    }
}

说白了,抽象工厂模式就是对简单工厂模式的一种改进,将工长抽象成一个抽象类,这样工厂就可以不用去关心对象的内部实现细节。