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();
        }
    
    }
  • 相关阅读:
    手机站测试工具(node服务器)
    [mongodb]child process failed, exited with error number 100
    正则
    VBA基础之Excel 工作薄(Book)的操作(三)
    VBA基础之Excel 工作表(Sheet)的操作(二)
    VBA基础之Excel VBA 表格的操作(一)
    基本的布局问题
    【转】jQuery最佳实践
    【转】jQuery的deferred对象详解
    2018-2019-1 20189221《Linux内核原理与分析》第二周作业
  • 原文地址:https://www.cnblogs.com/cxyzl/p/2545461.html
Copyright © 2011-2022 走看看