zoukankan      html  css  js  c++  java
  • AbstractFactory

    定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

    (1)定义产品接口

    /**
     * 第一种系列的产品
     * @author Administrator
     *
     */
    interface IProduct1{
        public void show();
    }
    
    /**
     * 第二种系列的 产品
     * @author Administrator
     *
     */
    interface IProduct2{
        public void show();
    }

    (2)产品的具体实现类

    /**
     * 产品的具体实现类1
     * @author Administrator
     *
     */
    class Product1 implements IProduct1{
        public void show()
        {
            System.out.println("product1");
        }
    }
    
    /**
     * 产品的具体实现类2
     * @author Administrator
     *
     */
    class Product2 implements IProduct2{
        public void show(){
            System.out.println("product2");
        }
    }

    (3)定义工厂接口

    /**
     * 工厂接口
     * @author Administrator
     *
     */
    interface IFactory {
        public IProduct1  createProduct1();
        public IProduct2 createProduct2();
    }

    (6)工厂的实现类

    /**
     * 工厂的实现类
     * @author Administrator
     *
     */
    class Factory implements IFactory{
        /**
         * 创建第一种产品
         */
        @Override
        public Product1 createProduct1(){
            return new Product1();
        }
        /**
         * 创建第二种产品
         */
        @Override
        public Product2 createProduct2(){
            return new Product2();
        }
    }

    (7)模拟客户端的使用

    /**
     * 客户端的模拟类
     * @author Administrator
     *
     */
    public class Client {
        public static void main(String[] args){
            //创建工厂
            IFactory factory=new Factory();
            //生产产品1 
            Product1 product1=(Product1) factory.createProduct1();
            product1.show();
            //生产产品2 
            Product2 product2=(Product2) factory.createProduct2();
            product2.show();
        }
    }

    可以使用同一个工厂创建多个相关或者相互依赖的对象,不需要具体指明要生产对象的类,只需要说明部分特性(一部分特性由生产对象的工厂来决定)

    完整代码

    package com.songyan.designpattern;
    
    /**
     * 第一种系列的产品
     * @author Administrator
     *
     */
    interface IProduct1{
        public void show();
    }
    
    /**
     * 第二种系列的 产品
     * @author Administrator
     *
     */
    interface IProduct2{
        public void show();
    }
    
    /**
     * 产品的具体实现类1
     * @author Administrator
     *
     */
    class Product1 implements IProduct1{
        public void show()
        {
            System.out.println("product1");
        }
    }
    
    /**
     * 产品的具体实现类2
     * @author Administrator
     *
     */
    class Product2 implements IProduct2{
        public void show(){
            System.out.println("product2");
        }
    }
    
    
    /**
     * 工厂接口
     * @author Administrator
     *
     */
    interface IFactory {
        public IProduct1  createProduct1();
        public IProduct2 createProduct2();
    }
    
    /**
     * 工厂的实现类
     * @author Administrator
     *
     */
    class Factory implements IFactory{
        /**
         * 创建第一种产品
         */
        @Override
        public Product1 createProduct1(){
            return new Product1();
        }
        /**
         * 创建第二种产品
         */
        @Override
        public Product2 createProduct2(){
            return new Product2();
        }
    }
    
    
    /**
     * 客户端的模拟类
     * @author Administrator
     *
     */
    public class Client {
        public static void main(String[] args){
            //创建工厂
            IFactory factory=new Factory();
            //生产产品1 
            Product1 product1=(Product1) factory.createProduct1();
            product1.show();
            //生产产品2 
            Product2 product2=(Product2) factory.createProduct2();
            product2.show();
        }
    }
  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8944668.html
Copyright © 2011-2022 走看看