zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式(1)

    讲工厂模式之前先来谈谈设计模式中最简单的模式 单例,很简单就是永远只能得到一个实现。

    Car:

    package cn.asto.factory;
    
    public class Car {
        private static Car car = new Car();
        private Car(){}
        public static Car getInstance(){
            return car;
        }
    }

    不多说了 

    Car car = Car.getInsatnce)();这个car就是一个单例模式,很简单。

    多例:也差不多

    Car:

    package cn.asto.factory;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Car {
        private static int max = 10;//最大实现数
        private static int index = 0;
        private static List<Car>  cars= new ArrayList<Car>();
        static {
            int i = 0;
            while(i++<max){
                cars.add(new Car());
            }
        }
        private Car(){}
        public static Car getInstance(){
            if(index==max) return null;
            Car car = cars.get(index);
            index++;
            return car;
        }
    }

    也没什么好说的,自己写了一个小demo,无非就是存了一个ArrayList,构造私有,在list装入指定数量的car.数据库的连接池就是这样子设计的,一上来什么都先不管,初始化一个List,list.size()就是数据库最大连接数。


    接下来讲点跟主题相关的,不然跑太远了。

    扯点专业术语,普通工厂

    弄一个功能接口:Moveable

    package cn.asto.simple;
    
    public interface Moveable {
    
        public void move();
    }

    在弄一个实体类:

    package cn.asto.simple;
    
    public class Car implements Moveable{
    
        @Override
        public void move() {
            System.out.println("Car is running");
            
        }
    
    }

    弄一个工厂抽象类

    package cn.asto.simple;
    
    public abstract class Factory {
    
        public abstract Moveable create();
    }

    油盐酱醋都上齐了,接下来就让主角登场,普通工厂(实现抽象工厂的方式)

    CarFactory:

    package cn.asto.simple;
    public class CarFactory extends Factory {
    
        @Override
        public Moveable create() {
            // TODO Auto-generated method stub
            return new Car();
        }
    
        
    
    }

    非常简单,不解释了。

    如果想再来一个工厂比如飞机工厂,

    新建一个Plane类实现Moveable接口

    新建一个PlaneFactory实现Factory抽象方法。return new Plane();即可。

    其实上面的getInstance()也是普通工厂。但是是否产生单例,那就另当别论了。

  • 相关阅读:
    Hosts文件的使用
    【java】关于时间
    【java】定时器
    log4j2的使用
    【springMVC】简单的前后端数据交流
    springMVC简单示例
    442. Find All Duplicates in an Array
    448. Find All Numbers Disappeared in an Array Add to List
    xml scheme 示例解析
    《C#高效编程》读书笔记04-使用Conditional特性而不是#if条件编译
  • 原文地址:https://www.cnblogs.com/think-in-java/p/4751246.html
Copyright © 2011-2022 走看看