美文网首页
Android设计模式-抽象工厂模式

Android设计模式-抽象工厂模式

作者: 星宇V | 来源:发表于2019-10-16 15:30 被阅读0次

    UML关系简单介绍
    UML简单使用的介绍
    创建型设计模式
    Android设计模式-单例模式
    Android设计模式-工厂模式
    Android设计模式-抽象工厂模式
    Android设计模式-建造者模式
    Android设计模式-原型模式
    结构型设计模式
    Android设计模式-代理模式
    Android设计模式-装饰模式
    Android设计模式-适配器模式
    Android设计模式-组合模式
    Android设计模式-门面模式
    Android设计模式-桥接模式
    Android设计模式-享元模式
    行为型设计模式
    Android设计模式-策略模式
    Android设计模式-命令模式
    Android设计模式-责任链模式
    Android设计模式-模版方法模式
    Android设计模式-迭代器模式
    Android设计模式-观察者模式
    Android设计模式-备忘录模式
    Android设计模式-中介者模式
    Android设计模式-访问者模式
    Android设计模式-状态模式
    Android设计模式-解释器模式

    1.定义

    为创建一组相关或者相互依赖的对象提供一个接口,而且无需指定他们的具体实现类

    2.抽象工厂模式UML图

    抽象工厂UML图

    角色介绍

    • client 客户端,调用场景
    • AbstractFactory 抽象工厂类
    • ConcreteFactory 具体工厂类
    • AbstractProduct 抽象产品类
    • ConcreteProduct 具体产品类

    3.实现

    举例说明:一个抽象工厂,有两个具体的实现,分别为Factory1和Factory2,分别生产数字为1和为2的产品

    3.1抽象工程类

    public abstract class AbstractFactory {
        public abstract AbstractProductA createA();
        public abstract AbstractProductB createB();
    }
    

    3.2具体工厂类

    public class Factory1 extends AbstractFactory {
        //1工厂生产产品为1的产品
        @Override
        public AbstractProductA createA() {
            return new ProductA1();
        }
        //1工厂生产产品为1的产品
        @Override
        public AbstractProductB createB() {
            return new ProductB1();
        }
    }
    
    public class Factory2 extends AbstractFactory {
        //2工厂生产产品为2的产品
        @Override
        public AbstractProductA createA() {
            return new ProductA2();
        }
        //2工厂生产产品为2的产品
        @Override
        public AbstractProductB createB() {
            return new ProductB2();
        }
    }
    

    3.3抽象产品类

    public abstract class AbstractProductA {
        //产品共有的方法
        public void a1(){
    
        }
        //每个产品不同的实现
        public abstract void a2();
    }
    
    public abstract class AbstractProductB {
        //产品共有的方法
        public void b1(){
    
        }
        //每个产品不同的实现
        public abstract void b2();
    }
    

    3.4 具体产品

    public class ProductA1 extends AbstractProductA {
        @Override
        public void a2() {
            System.out.println("我是产品A1");
        }
    }
    
    public class ProductA2 extends AbstractProductA {
        @Override
        public void a2() {
            System.out.println("我是产品A2");
        }
    }
    
    public class ProductB1 extends AbstractProductB {
        @Override
        public void b2() {
            System.out.println("我是产品B1");
        }
    }
    
    public class ProductB2 extends AbstractProductB {
        @Override
        public void b2() {
            System.out.println("我是产品B2");
        }
    }
    

    3.5场景调用

    public class MyClass {
        public static void main(String args[]) {
            AbstractFactory factory1=new Factory1();
            AbstractFactory factory2=new Factory2();
    
            AbstractProductA a1=factory1.createA();
            AbstractProductA a2=factory2.createA();
    
            AbstractProductB b1=factory1.createB();
            AbstractProductB b2=factory2.createB();
    
            a1.a2();
            a2.a2();
    
            b1.b2();
            b2.b2();
        }
    }
    
    //打印结果
    我是产品A1
    我是产品A2
    我是产品B1
    我是产品B2
    

    4.总结

    • 抽象工厂模式有良好的封装性,但是扩展性却很差,如以上的例子,如果要增加一个C产品,那么抽象工厂和具体工厂都需要修改。但是如果只是增加一个产品等级3,那么只需要增加一个具体工厂和产品类即可,也就是说横向扩展容易,纵向扩展难,但是横向纵向的设定,还是看自己设计了,你完全可以将产品等级设计为纵向,产品类型设计为横向,结果也就反了过来,所以具体设计的时候,要想清楚了。
    • 使用场景:一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。
    • 工厂模式与抽象工厂模式的区别,简单来说,就相当于工厂模式是只有一条生产线的工厂,而抽象工厂模式是具有多条生产线的工厂。

    相关文章

      网友评论

          本文标题:Android设计模式-抽象工厂模式

          本文链接:https://www.haomeiwen.com/subject/nnyymctx.html