zoukankan      html  css  js  c++  java
  • 设计模式之禅抽象工厂

    抽象工厂模式:为创建一组相关或互相以来的对象提供一个接口,而且无需制定它们的具体类。

    抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂产生需要的对象是非常好的解决方式。即工厂方法只满足单一条件商品的创建,而若对商品进行另一条件分类时,就显得乏力了。抽象工厂是将工厂细分,通过接口回调子工厂的方式实现高内聚的。

    package demo;
    /**
     * 抽象产品类
     * @author zhf
     *
     */
    public abstract class AbstractProductA {
        //每个产品共有的方法
        public void shareMethod(){
            
        }
        //每个产品相同方法,不同实现
        public abstract void doSomething();
        
    }
    
    package demo;
    /**
     * 抽象产品类
     * @author zhf
     *
     */
    public abstract class AbstractProductB {
        //每个产品共有的方法
        public void shareMethod(){
            
        }
        //每个产品相同方法,不同实现
        public abstract void doSomething();
        
    }
    
    
    package demo;
    
    public class ProductA1 extends AbstractProductA {
        @Override
        public void doSomething() {
            //产品一的实现方法
            
        }
    
    }
    
    package demo;
    
    public class ProductA2 extends AbstractProductA {
        @Override
        public void doSomething() {
            //产品二的实现方法
            
        }
    
    }
    
    package demo;
    
    public class ProductB1 extends AbstractProductB {
        @Override
        public void doSomething() {
            //产品一的实现方法
            
        }
    
    }
    
    package demo;
    
    public class ProductB2 extends AbstractProductB {
        @Override
        public void doSomething() {
            //产品二的实现方法
            
        }
    
    }
    
    
    package demo;
    
    public abstract class AbstractCreator {
        public abstract AbstractProductA createProductA();
        public abstract AbstractProductB createProductB();
    
    }
    
    
    package demo;
    /**
     * 产品等级1的实现类
     * @author zhf
     *
     */
    public class Creator1 extends AbstractCreator{
        @Override
        public AbstractProductA createProductA() {
            return new ProductA1();
        }
        @Override
        public AbstractProductB createProductB() {
            // TODO Auto-generated method stub
            return new ProductB1();
        }
    }
    
    package demo;
    /**
     * 产品等级2
     * @author zhf
     *
     */
    public class Creator2 extends AbstractCreator{
        @Override
        public AbstractProductA createProductA() {
            // TODO Auto-generated method stub
            return new ProductA2();
        }
        @Override
        public AbstractProductB createProductB() {
            // TODO Auto-generated method stub
            return new ProductB2();
        }
    }
    
    package demo;
    
    public class Client {
        public static void main(String[] args) {
            AbstractCreator creator1 = new Creator1();
            AbstractCreator creator2 = new Creator2();
            
            AbstractProductA a1 = creator1.createProductA();
            AbstractProductA a2 = creator2.createProductA();
            AbstractProductB b1= creator1.createProductB();
            AbstractProductB b2= creator2.createProductB();
        }
    
    }
  • 相关阅读:
    bzoj 3779: 重组病毒【LCT+线段树维护dfs序】
    bzoj 4817: [Sdoi2017]树点涂色【树链剖分+LCT】
    bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】
    bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】
    bzoj 3589: 动态树【树链剖分+容斥】
    bzoj 1042: [HAOI2008]硬币购物【容斥原理+dp】
    bzoj 4517: [Sdoi2016]排列计数【容斥原理+组合数学】
    好听的英文歌曲
    颜色色环
    颜色模式
  • 原文地址:https://www.cnblogs.com/cxyzl/p/2545461.html
Copyright © 2011-2022 走看看