zoukankan      html  css  js  c++  java
  • 设计模式学习笔记五:抽象工厂模式

    抽象工厂模式是工厂方法模式的进一步抽象,适用于有多个产品族的场景,拿美食举例:

    美食可分为中餐和西餐,中餐又有东北菜,湘菜,粤菜等。而西餐又有法式菜、美式菜、德式菜等。这种可以称之为产品族。

    个人认为抽象工厂顶级类应该都是单例的。

    直接上代码了,代码与上面举例业务无关:

    /**
     * @author liushijie
     *
     */
    public class Run {
        public static void main(String[] args) {
            ProductFactory.getInstance().createPorductA1().create();
            ProductFactory.getInstance().createPorductB1().create();
            
            ProductFactory.getInstance().createPorductA2().create();
            ProductFactory.getInstance().createPorductB2().create();
        }
    }
    
    abstract class ProductAbstractFactory {
        public abstract IProductA createPorductA1();
        public abstract IProductA createPorductA2();
        public abstract IProductB createPorductB1();
        public abstract IProductB createPorductB2();
    }
    
    class ProductFactory extends ProductAbstractFactory {
        
        private static final ProductFactory facotry = new ProductFactory(); 
        
        private ProductFactory() {/*closed*/}
    
        public static ProductFactory getInstance() {
            return facotry;
        }
        
        @Override
        public IProductA createPorductA1() {
            return new ProductA1();
        }
        
        @Override
        public IProductA createPorductA2() {
            return new ProductA2();
        }
        
        @Override
        public IProductB createPorductB1() {
            return new ProductB1();
        }
        
        @Override
        public IProductB createPorductB2() {
            return new ProductB2();
        }
        
    }
    
    interface IProductA {
        void create();
    }
    
    interface IProductB {
        void create();
    }
    class ProductA1 implements IProductA {
    
        @Override
        public void create() {
            System.out.println("product A1");
        }    
    }
    
    class ProductA2 implements IProductA {
    
        @Override
        public void create() {
            System.out.println("product A2");
        }
        
    }
    
    class ProductB1 implements IProductB {
    
        @Override
        public void create() {
            System.out.println("product B1");
        }
    }
    
    class ProductB2 implements IProductB {
    
        @Override
        public void create() {
            System.out.println("product B2");
        }
        
    }
  • 相关阅读:
    20145213《Java程序设计》第二周学习总结
    20145213《Java程序设计》第一周学习总结
    对于老师问卷调查中若干问题的回答
    问卷调查
    关于矩阵的分解的专题讨论
    关于合同变换的专题讨论
    关于初等变换的专题讨论
    关于矩阵的迹的专题讨论
    关于矩阵的秩的专题讨论
    关于含参变量反常积分一致收敛的专题讨论
  • 原文地址:https://www.cnblogs.com/liushijie/p/4712917.html
Copyright © 2011-2022 走看看