ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[DesignPattern] 设计之禅读书笔记(三) 抽象工厂模式

2020-10-15 06:31:47  阅读:249  来源: 互联网

标签:return 之禅 读书笔记 abstract public DesignPattern new 工厂 class


  • 抽象工厂模式(Abstract Factory Pattern)

    • Provide an interface for creating families of related or dependent objects without specifying their concerete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)
    • 优点:
      1. 封装性
      2. 产品族内的约束为非公开状态
    • 缺点:
      1. 产品族扩展非常困难
    • 使用场景:
      • 一个对象(或者一组没有任何关系的对象)都有相同的约束, 则可以使用抽象工厂。比如涉及不同的操作系统的时候可以考虑用抽象工厂模式。
    • 注意事项:
      • 产品族扩展困难,而不是生产线(产品等级,eg下图中的1/2)。也就是说横向扩展容易,纵向扩展难
    • 图列
    • 例子
    public abstract class AbstractProductA{
        public void sharedMethod();
        public abstract doSomething();
    }
    public class ProductA1 exends AbstractA {
        public void doSomthing() {
            //
        }
    }
    public class ProductA2 exends AbstractA {
        public void doSomthing() {
            //
        }
    }
    
    // 有N个产品族,在抽象工厂类中就应该有N个创建方法
    public abstract class AbstractCreator {
        public abstract AbstractProductA createProductA();
        public abstract AbstractProductB createProductB();
    }
    
    // 有M个生产线(产品等级)就应该有M个实现工厂类,在每个实现工厂中,实现不同生产线(产品等级)的生产任务。
    public class Creator1 extends AbstractCreator {
        public AbstractProduceA createProductA{
            return new ProductA1();
        }
        public AbstractProduceB createProductB{
            return new ProductB1();
        }
    }
    
    public class Creator2 extends AbstractCreator {
        public AbstractProduceA createProductA{
            return new ProductA2();
        }
        public AbstractProduceB createProductB{
            return new ProductB2();
        }
    }
    
    
    • 改进:
      • 可以给abstractProduct和abstractCreator都加入interface,这样就更方便使用。

标签:return,之禅,读书笔记,abstract,public,DesignPattern,new,工厂,class
来源: https://www.cnblogs.com/codingEskimo/p/13818436.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有