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();
        }
    
    }
  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/cxyzl/p/2545461.html
Copyright © 2011-2022 走看看