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");
        }
        
    }
  • 相关阅读:
    强迫症
    bzoj1758 [Wc2010]重建计划
    bzoj1070 [SCOI2007]修车
    bzoj3675 [Apio2014]序列分割
    bzoj1010 [HNOI2008]玩具装箱toy
    bzoj3697 采药人的路径
    bzoj2152 聪聪可可
    bzoj2599 [IOI2011]Race
    Ubuntu 18.04 LTS 下 GTK3 安装与编译
    启动或重启 dnsmasq 提示端口 53 被占用的解决方案
  • 原文地址:https://www.cnblogs.com/liushijie/p/4712917.html
Copyright © 2011-2022 走看看