• 设计模式之禅抽象工厂


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

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

    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();
        }
    
    }
  • 相关阅读:
    Shell编程笔记
    Git学习笔记
    JavaScript+jQuery实现简单的动态菜单
    JSON表单提交(ajax异步刷新)
    Json简单实例
    jsp分页
    浅谈this关键字
    Servlet+Javabean+Html实现简单的查询.删除.修改.添加四个功能
    Tomcat的安装与在myeclips中的配置
    jsp页面实现增删修改和查询
  • 原文地址:https://www.cnblogs.com/cxyzl/p/2545461.html
Copyright © 2020-2023  润新知