zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    定义:创建一组相关或相互依赖的对象提供一个接口,并且无须指定他们的具体类。抽象工厂模式是工厂模式的升级版本,当有多个业务品种和业务分类时,通过抽象工厂模式产生需要的对象是一个很好的解决方式。有N个产品族,在抽象工厂类中就应该有N个创建方法。

    首先假设有两个互相影响的产品族,比如汽车的左侧门和右侧门,它们数量相等--两个对象的约束,每个型号的车门都是不一样的,这是产品的等级约束,举一个通用代码的例子:

    public abstract class AbstractProduct{
        //每个产品公有的方法
        public void shareMethod(){}
        //每个产品相同方法 不同实现
        public abstract void doSomething();
    }
    //A1实现类
    public class ProductA1 extends AbstractProduct{
        public void doSomething(){
            System.out.print("a");
        }
    }
    //A2实现类
    public class ProductA2 extends AbstractProduct{
        public void doSomething(){
            System.out.print("b");
        }
    }
    //抽象工厂类 有几个产品族就要有几个创建方法
    public abstract class AbstractCreactor{
        //创建A产品家族
        public abstract AbstractProduct createProductA();
        //创建B产品族
        public abstract AbstractProduct createProductB();
    }
    //产品等级1的实现类
    public class Creactor1 extends AbstractCreator{
        public AbstractProductA createProductA(){
            return new ProductA1();
        }
        public AbstractProductB createProductB(){
            return new ProductB1();
        }
    }
    //产品等级2的实现类
    public class Creator2 extends AbstractCreator {
        //只生产产品等级为2的A产品
        public AbstractProductA createProductA() {
            return new ProductA2();
        }
        //只生产产品等级为2的B产品
        public AbstractProductB createProductB() {
            return new ProductB2();
        }
    }
    //场景类
    public class Client{
        public static void main(String[] args){
            //定义两个工厂
            AbstractCreactor creactor1 = new Creactor();
            AbstractCreactor creactor2 = new Creactor();
            //产生A1对象
            AbstractProductA a1 = creator1.createProductA();
            //产生A2对象
            AbstractProductA a2 = creator2.createProductA();
            //产生B1对象
            AbstractProductB b1 = creator1.createProductB();
            //产生B2对象
            AbstractProductB b2 = creator2.createProductB();  
         }
    }

    抽象工厂模式的优缺点:

    优点:

    • 封装性,产品类的实现类不需要高层模块关心,只需要关心抽象类和接口,只要知道工厂类是哪个,就可以创建需要的对象
    • 产品族类的约束为非公开状态。具体的产品族约束在工厂内实现,高层模块调用不需要关心。

    缺点:

    • 最大缺点是产品扩展类非常困难

    应用场景:

    比较简单,在一个对象族中都有一个相同的约束,比如一个软件实体(文本编辑器等)同时在windows和linux平台开发,功能和界面相同,代码实现层不完全相同,这就是共同的约束:操作系统,这就可以使用抽象工厂模式。

  • 相关阅读:
    Sed的使用方法简介
    Shell脚本基础
    网络配置与内核模块相关
    RPM管理,计划任务与性能监控
    SSH服务
    LVM与RAID阵列
    网络存储服务器
    FTP服务
    网络安全之iptables防火墙
    MySQL使用笔记(七)排序和限制数据记录查询
  • 原文地址:https://www.cnblogs.com/loveBolin/p/9678495.html
Copyright © 2011-2022 走看看